TABLE OF CONTENTS

Hi 🤓 Cảm ơn bạn đã ghé thăm blog này, nếu những bài viết trên blog giúp ích cho bạn. Bạn có thể giúp blog hiển thị quảng cáo bằng cách tạm ngừng ad blocker 😫 và để giúp blog duy trì hoạt động nếu bạn muốn.
Cảm ơn bạn!

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ừ typeAtypeB.

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 PersonEmployee. 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 PersonStudent 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 studentage 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.

Có thể bạn thích ⚡
homiedev
About Me

Hi, I'm @devnav. Một người thích chia sẻ kiến thức, đặc biệt là về Frontend 🚀. Trang web này được tạo ra nhằm giúp các bạn học Frontend hiệu quả hơn 🎉😄.

Chúc các bạn tìm được kiến thức hữu ích trong blog này 😁😁.