Các lớp tổng quát trong TypeScript
Ngoài các giao diện tổng quát, trong TypeScript chúng ta cũng có thể tạo các lớp tổng quát.
Hãy tạo một lớp User có kiểu
tổng quát. Chúng ta cũng sẽ viết thuộc tính value
kiểu tổng quát và tạo một hàm tạo tương ứng:
class User <T> {
value: T;
constructor(userData: T) {
this.value = userData;
}
}
Bây giờ hãy tạo một đối tượng của lớp này và gán cho nó một giá trị kiểu chuỗi trong thuộc tính:
let user = new User('john');
console.log(user.value); // 'john'
Tuy nhiên, nếu chúng ta đã chỉ định giá trị chuỗi cho đối tượng khi khởi tạo nó, chúng ta sẽ không thể ghi đè giá trị này thành một kiểu khác:
let user = new User('john');
user.value = 35;
Khi cố gắng chạy mã, chúng ta sẽ thấy lỗi sau:
Type 'number' is not assignable to type 'string'.
Nhưng đồng thời, chúng ta có thể ghi đè giá trị chuỗi:
let user = new User('john');
user.value = 'alex';
console.log(user.value); // 'alex'
Lưu ý rằng chúng ta không thể ghi đè thuộc tính của cùng một đối tượng thành một kiểu khác, nhưng chúng ta có thể tạo một đối tượng khác:
let newUser = new User(35);
console.log(newUser.value); // 35