Khái quát cơ bản về TypeScript
Generics cho phép tạo 'biến loại' có thể được sử dụng để tạo các lớp, hàm và bí danh loại mà không cần xác định rõ ràng loại mà chúng sử dụng.
Generics giúp việc viết mã có thể tái sử dụng dễ dàng hơn.
Chức năng
Generics với các hàm giúp tạo ra các phương thức tổng quát hơn, thể hiện chính xác hơn các loại được sử dụng và trả về.
Ví dụ
function createPair<S, T>(v1: S, v2: T): [S, T] {
return [v1, v2];
}
console.log(createPair<string, number>('hello', 42)); // ['hello', 42]
Hãy tự mình thử »TypeScript cũng có thể suy ra loại tham số chung từ các tham số hàm.
Các lớp học
Generics có thể được sử dụng để tạo các lớp tổng quát, như Map .
Ví dụ
class NamedValue<T> {
private _value: T | undefined;
constructor(private name: string) {}
public setValue(value: T) {
this._value = value;
}
public getValue(): T | undefined {
return this._value;
}
public toString(): string {
return `${this.name}: ${this._value}`;
}
}
let value = new NamedValue<number>('myNumber');
value.setValue(10);
console.log(value.toString()); // myNumber: 10
Hãy tự mình thử »TypeScript cũng có thể suy ra loại tham số chung nếu nó được sử dụng trong tham số hàm tạo.
Nhập bí danh
Generics trong bí danh loại cho phép tạo các loại có thể tái sử dụng nhiều hơn.
Ví dụ
type Wrapped<T> = { value: T };
const wrappedValue: Wrapped<number> = { value: 10 };
Điều này cũng hoạt động với các giao diện có cú pháp sau: interface Wrapped<T> {
Được chứng nhận!
$45 ĐĂNG KÝ
Giá trị mặc định
Generics có thể được chỉ định các giá trị mặc định áp dụng nếu không có giá trị nào khác được chỉ định hoặc suy ra.
Ví dụ
class NamedValue<T = string> {
private _value: T | undefined;
constructor(private name: string) {}
public setValue(value: T) {
this._value = value;
}
public getValue(): T | undefined {
return this._value;
}
public toString(): string {
return `${this.name}: ${this._value}`;
}
}
let value = new NamedValue('myNumber');
value.setValue('myValue');
console.log(value.toString()); // myNumber: myValue
mở rộng
Các ràng buộc có thể được thêm vào thuốc generic để giới hạn những gì được phép. Các ràng buộc giúp bạn có thể dựa vào một loại cụ thể hơn khi sử dụng loại chung.
Ví dụ
function createLoggedPair<S extends string | number, T extends string | number>(v1: S, v2: T): [S, T] {
console.log(`creating pair: v1='${v1}', v2='${v2}'`);
return [v1, v2];
}
Điều này có thể được kết hợp với một giá trị mặc định.