Khám Phá 11 Khái Niệm TypeScript Nâng Cao Để Nâng Tầm Kỹ Năng Lập Trình
TypeScript là một ngôn ngữ lập trình hiện đại, được xây dựng trên nền tảng của JavaScript nhưng mang lại tính năng an toàn kiểu (type safety) vượt trội. Điều này giúp lập trình viên dễ dàng phát hiện lỗi trong quá trình phát triển ứng dụng. Trong bài viết này, chúng ta sẽ khám phá 11 khái niệm TypeScript nâng cao mà mọi lập trình viên nên nắm vững để cải thiện khả năng lập trình của mình.
1. Generics
Generics là một khái niệm cho phép tạo ra các kiểu dữ liệu có thể tái sử dụng. Điều này rất hữu ích khi xử lý dữ liệu với các kiểu khác nhau tại thời điểm biên dịch, giúp mã nguồn linh hoạt hơn.
Ví dụ về Generics:
typescript
function func<T>(args:T):T {
return args;
}
2. Generics với Ràng Buộc Kiểu
Bạn có thể áp dụng ràng buộc kiểu để giới hạn generics chỉ nhận các kiểu dữ liệu nhất định.
Ví dụ:
typescript
function func<T extends string | number>(value: T): T {
return value;
}
3. Giao Diện Generics
Giao diện generics cho phép bạn định nghĩa các hợp đồng (interface) cho các đối tượng và lớp, giúp chúng linh hoạt trong việc tương tác với nhiều kiểu dữ liệu khác nhau.
Ví dụ:
typescript
interface Repository<T, U> {
items: T[];
add(item: T): void;
getById(id: U): T | undefined;
}
4. Lớp Generic
Khi bạn cần tất cả các thuộc tính trong lớp của mình tuân theo kiểu được chỉ định bởi tham số generic, lớp generic sẽ là lựa chọn hoàn hảo.
typescript
class UserDetails<T extends User> {
id: T['id'];
name: T['name'];
age: T['age'];
}
5. Ràng Buộc Tham Số Kiểu
Khái niệm này cho phép tham số kiểu phụ thuộc vào một số tham số được truyền vào khác. Điều này làm cho mã nguồn trở nên an toàn hơn và giúp hạn chế lỗi.
Ví dụ:
typescript
function getProperty<Type>(obj: Type, key: keyof Type) {
return obj[key];
}
6. Kiểu Điều Kiện
Kiểu điều kiện cho phép bạn xác định cảm hứng kiểu dựa trên các điều kiện nhất định, giúp bạn tạo mã linh hoạt hơn.
Ví dụ:
typescript
type HasProperty<T, K extends keyof T> = K extends 'age' ? 'Has Age' : 'Has Name';
7. Kiểu Giao Hội
Kiểu giao hội cho phép kết hợp nhiều kiểu dữ liệu thành một, từ đó cho phép kế thừa các thuộc tính từ nhiều kiểu khác nhau.
Ví dụ:
typescript
type HealthyBody = MentalWellness & PhysicalWellness & Productivity;
8. Từ Khóa Infer
Từ khóa infer giúp bạn lấy ra kiểu dữ liệu con từ một kiểu dữ liệu cụ thể, rất hữu ích trong nhiều tình huống lập trình.
Ví dụ:
typescript
type ReturnTypeOfPromise<T> = T extends Promise<infer U> ? U : number;
9. Phương Sai Kiểu
Đây là khái niệm nói về cách mà các kiểu con và kiểu cha liên quan đến nhau, sử dụng trong các tình huống kế thừa trong lập trình hướng đối tượng.
Ví dụ:
typescript
class Vehicle { }
class Car extends Vehicle { }
10. Phản Xạ (Reflection)
Phản xạ đề cập đến việc xác định kiểu của một biến tại thời điểm chạy, giúp bạn xử lý kiểu dữ liệu một cách linh hoạt hơn.
Ví dụ:
typescript
const num = 23;
console.log(typeof num); // "number"
11. Dependency Injection
Dependency Injection là mẫu thiết kế cho phép bạn đưa mã phụ thuộc vào thành phần mà không cần phải trực tiếp quản lý, giúp mã nguồn dễ bảo trì hơn.
Ví dụ:
typescript
const healthAdvice = new HealthAdvice(mentalWellness, physicalWellness);
Bằng cách nắm vững 11 khái niệm TypeScript nâng cao này, bạn sẽ phát triển được những ứng dụng tốt hơn và tối ưu hóa mã nguồn của mình, từ đó nâng cao hiệu suất làm việc trong lĩnh vực lập trình.
Cảm ơn các bạn đã theo dõi bài viết này. Hãy bắt tay vào việc thực hành ngay hôm nay!
source: viblo