- vừa được xem lúc

So sánh Interface và Type (aka Type Alias) trong TypeScript

0 0 9

Người đăng: Anthony Tran

Theo Viblo Asia

Trong TypeScript, cả Interface và Type Alias đều được sử dụng để định nghĩa kiểu dữ liệu, nhưng chúng có những điểm khác biệt riêng và có thể phù hợp với các trường hợp khác nhau. Bài viết này sẽ so sánh hai khái niệm này, cung cấp ví dụ cụ thể và phân tích chúng.

Interface

Interface cho phép bạn định nghĩa form của Object. Interface chủ yếu được sử dụng để khai báo các loại đối tượng và thường được dùng trong lập trình hướng đối tượng. Interface có thể extend (kế thừa, mở rộng) và merge (hợp nhất lại), điều này giúp cho việc mở rộng Model trở nên dễ dàng, linh hoạt và dễ tái sử dụng hơn.

Ví dụ về Interface

interface User { name: string; age: number; email?: string; // Thuộc tính tùy chọn
} const user: User = { name: "John", age: 30
};

Phân tích ví dụ

  • Interface User định nghĩa ba thuộc tính name, ageemail. Trong đó, email là tùy chọn.
  • Đối tượng user được khai báo theo interface User, phải tuân thủ các thuộc tính đã được định nghĩa trong interface.

Type Alias

Type Alias cho phép bạn tạo một tên gọi mới cho bất kỳ kiểu dữ liệu nào, không chỉ giới hạn ở các đối tượng. Type Alias có thể sử dụng với các primitive type (kiểu nguyên thủy), union type, intersection, tuple, ...

Ví dụ về Type Alias

type User = { name: string; age: number; email?: string;
}; const user: User = { name: "John", age: 30
}; type ID = number | string; // Union Type
let userId: ID = 123;
userId = "abc123";

Phân tích ví dụ

  • Type Alias User định nghĩa kiểu dữ liệu tương tự như interface User ở trên.
  • Type Alias ID là một kiểu liên hợp (union type), cho phép userId có thể là kiểu number hoặc string.

So sánh Interface và Type Alias

Điểm tương đồng

  • Đều được sử dụng để định nghĩa kiểu dữ liệu
  • Hỗ trợ Optional Field (các thuộc tính không bắt buộc)

Điểm khác biệt

  1. Kế thừa/mở rộng (Extending):

    • Interface hỗ trợ mở rộng (extend) và hợp nhất (declaration merging), cho phép bạn dễ dàng extend các kiểu dữ liệu mà không phải thay đổi cấu trúc ban đầu.
    • Type Alias không hỗ trợ hợp nhất (declaration merging), nhưng có thể sử dụng với các kiểu giao hợp (intersection) để tạo ra kiểu dữ liệu mới.
  2. Kết hợp với các Type khác:

    • Inteface chỉ có thể extend Type khác, không thể tương tác bằng các cách khác.
    • Type Alias có thể sử dụng với các primitive type, union type, intersection, tuple, v.v.
  3. Hiệu suất và tối ưu hóa:

    • Interface thường được tối ưu hóa tốt hơn trong quá trình compile.

Dưới đây là ví dụ phức tạp hơn về cách sử dụng Interface và Type Alias với union và intersection.

interface Person { name: string; age: number;
} interface Employee extends Person { employeeId: number;
} type Developer = Person & { skills: string[];
}; const employee: Employee = { name: "Alice", age: 28, employeeId: 1234
}; const developer: Developer = { name: "Bob", age: 32, skills: ["JavaScript", "TypeScript"]
};
  • Employee mở rộng từ Person bằng cách sử dụng interface, thêm thuộc tính employeeId.
  • Developer là một kiểu giao hợp (intersection type) giữa Person và một đối tượng mới có thuộc tính skills.

Kết luận

Interface và Type Alias đều là những công cụ mạnh mẽ trong TypeScript, nhưng mỗi cái có ưu và nhược điểm riêng. Interface phù hợp với các tình huống cần mở rộng và hợp nhất kiểu dữ liệu, trong khi Type Alias linh hoạt hơn với nhiều kiểu dữ liệu khác nhau. Việc lựa chọn giữa chúng phụ thuộc vào ngữ cảnh cụ thể của dự án và phong cách lập trình của bạn.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 528

- vừa được xem lúc

Type annotation vs Type Inference - Typescript

Trong bài viết này, chúng ta sẽ tìm hiểu kỹ về TypeScript bằng cách tìm hiểu sự khác biệt giữa kiểu chú thích và kiểu suy luận. Tôi sẽ cho rằng bạn có một số kinh nghiệm về JavaScript và biết về các kiểu cơ bản, như chuỗi, số và boolean.

0 0 45

- vừa được xem lúc

Type Annotation và Type Inference trong TypeScript là gì?

Khi làm việc với javascript chắc hẳn các bạn đã quá quen với việc dùng biến mà không cần phải quan tâm đến kiểu dữ liệu của nó là gì phải không? Đúng là mới đầu tiếp cận với Typescript mình cũng cảm thấy nó khá là phiền vì cần phải khai báo đủ type để nó chặt chẽ hơn. Lúc đó mình còn nghĩ: " JavaScr

0 0 37

- vừa được xem lúc

Tìm hiểu TypeScript và kiến thức cơ bản

TypeScript là gì. TypeScript sử dụng tất cả các tính năng của của ECMAScript 2015 (ES6) như classes, modules.

0 0 53

- vừa được xem lúc

TypeScript - P1: Vì sao TypeScript được yêu thích đến vậy?

Trải nghiệm thực tế. Trước khi là một Web Developer, tôi là một Mobile Developer và Java là thứ mà tôi từng theo đuổi.

0 1 69

- vừa được xem lúc

4 Tính năng rất hay từ TypeScript

Xin chào các bạn hôm nay mình xin chia sẽ những tính năng rất hay của TypeScript (TS), các bạn cùng tìm hiểu nhé. Ngoài việc set Type cho biến, tham số hay function thì ví dụ khi bạn nhìn vào một tham

0 0 96