Cảm ơn bạn!
Intersection Types trong Typescript có gì hay?
Trong bài viết này chúng ta cùng tìm hiểu về Intersection Types trong Typescript nhé!
Intersection Types
Intersection Types giúp chúng ta tạo một type bao gồm các type mà chúng ta đã tạo trước đó. Để kết hợp các type vào một type mới ta sử dụng &
operator.
type typeAB = typeA & typeB;
typeAB
sẽ bao gồm các thuộc tính từ typeA
và typeB
.
Cùng xem ví dụ dưới đây để hiểu rõ hơn về Intersection Types nhé:
interface Person {
name: string;
age: number;
}
interface Employee {
employeeCode: string;
}
let employee: Person & Employee = {
name: 'Nguyen Anh Vu'
age: 22,
employeeCode: '290200'
}
Chúng ta có thể thấy object employee
có tất cả các thuộc tính của Person
và Employee
. Nếu thiếu bất kỳ các thuộc tính trong 2 type này thì Typescript sẽ báo lỗi.
Bây giờ ta thử tạo 2 type có cùng member và xem kết quả nhé:
interface Person {
name: string;
age: number;
}
interface Student {
studentCode: number;
age: number;
}
let student: Student & Person = {
studentCode: 10022022,
name: "Vu",
age: 20
}
Ở ví dụ trên, member age
đều xuất hiện trong cả 2 type với cùng kiểu giá trị number
. Trong trường hợp này Typescript sẽ lấy các member của cả 2 type Person
và Student
như bình thường.
Giả sử age
ở 2 type có kiểu giá trị khác nhau thì ta sẽ nhận được một thông báo lỗi như sau:
interface Person {
name: string;
age: number;
}
interface Student {
studentCode: number;
age: string;
}
let student: Student & Person = {
studentCode: 10022022,
name: "Vu",
age: 22 // Lỗi
}
Typescript báo rằng: Type 'number' is not assignable to type 'never'. The expected type comes from property 'age' which is declared here on type 'Student & Person'
Ở ví dụ trên, object student
có age
là kiểu never
. Lý do là vì ta đã tạo 2 type có age
khác kiểu giá trị. Khi sử dụng Intersection Types, Typescript sẽ chuyển age
sang kiểu never
.
never
là type không chứa giá trị. Do đó, ta không thể gán bất kỳ giá trị nào cho một biến có kiểu never
.
Lúc này nếu muốn hết lỗi ta phải đưa age
về cùng kiểu.
Kết luận
Như vậy là chúng ta đã tìm hiểu xong về Intersection Types(&)
trong Typescript. Hy vọng bài viết giúp ích cho các bạn.
Chúc các bạn học tốt.