Types và interface trong TypeScript

TypeScript là một ngôn ngữ mã nguồn mở dựa trên JavaScript, một trong những ngôn ngữ phổ biến và được sử dụng nhiều nhất. Typescript mở rộng thêm Javascript bằng cách thêm vào một số static types. Types cung cấp một phương thức tường minh hơn để mô tả các hình thái của object, mô

TypeScript là một ngôn ngữ mã nguồn mở dựa trên JavaScript, một trong những ngôn ngữ phổ biến và được sử dụng nhiều nhất. Typescript mở rộng thêm Javascript bằng cách thêm vào một số static types.

Types cung cấp một phương thức tường minh hơn để mô tả các hình thái của object, mô tả documentation tốt hơn, thông qua đó TypeScript có thể xác định rằng code của chúng ta đang hoạt động chính xác hay không.

Chỉ định Types là không bắt buộc trong TypeScript. Trong bài viết này chúng ta sẽ cùng tìm hiểu về type aliases và interface và một số điểm khác biệt giữa chúng. Bắt đầu nào:

Type aliases

Trong TypeScript, có rất nhiều types cơ bản như là number, string,… Ngoài ra, trong TypeScript chúng ta có các types nâng cao và các types nâng cao này được gọi là type aliases. Với type aliases, chúng ta có thể tạo tên mới cho một type nhưng chúng ta không define một type mới

Từ khóa type trong TypeScript là một cách cung cấp type aliases cho các variables, objects và functions của chúng ta. Các type aliases này mô tả dữ liệu của chúng ta trông như thế nào. Để mô tả loại dữ liệu của mình trông như thế nào chúng ta sử dụng các type cơ bản (string, number,…) hoặc bằng cách tạo tạo các type tùy chỉnh của chúng ta.

Khi được hỏi về sự khác biệt giữa types và interfaces thì chúng ta có thể hiểu rằng là sự khác biệt giữa type aliasesinterface

// type của Year là một number
type Year = number;// Biến currentYear là thuộc type Year và phải là numberlet currentYear: Year =2021;// custom Person object type
type Person ={
    name: String;
    gender: String;};

Interfaces

Interface trong typescript cho phép bạn định nghĩ thuộc tính là gì và phương thức là gì mà đối tượng cần để được implement. Nếu đối tượng tuân thủ đúng khuôn mẫu interface thì đối tượng đã implement interface ấy sẽ được thực thi đúng. Nếu interface không được thực thi đúng thì typescript sẽ phát sinh lỗi ngay lập tức.

interfacePerson{
  name: string
  age: number
}const viblo: Person ={
  name:"Viblo",
  age:31};

Types vs Interfaces

Sau đây là một số điểm khác biệt giữa types và interfaces:

Có thể merge interfaces, types thì không

Nhiều khai báo có cùng tên chỉ hợp lệ khi sử dụng interface. Làm như vậy sẽ không ghi đè trước đó mà tạo ra kết quả hợp nhất chứa từ tất cả các khai báo

interfacePerson{
  name: string
}interfacePerson{
    age: number
}const viblo: Person ={
  name:"Viblo",
  age:31}

còn nếu chúng ta merge types kết quả sẽ biên dịch ra lỗi Duplicate identifier

type Person ={
  name: string
}

type Person ={
    age: number
}const viblo: Person ={
  name:"Viblo",
  age:31}// error: Duplicate identifier 'Person'

Type aliases có thể sử dụng computed properties

Từ khóa in có thể được sử dụng để iterate tất cả các item bên trong một tập hợp keys. Chúng ta có thể sử dụng tính năng này để
tạo mapped types.

Ví dụ sử dụng type aliases

type keys ="firstname"|"lastname"

type Person ={[key in keys]: string
}const viblo: Person ={
  firstname:"Viblo",
  lastname:"blog"}

Với interface chúng ta sẽ không thể tận dụng các computed properties

type keys ="firstname"|"lastname"interfacePerson{[key in keys]: string
}// error: A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type

Extend và implements

Trong TypeScript, chúng ta dễ dàng extends và implements interfaces. Nhưng không thể với types
Với interface để kế thừa chúng ta sử dụng extends:

interfaceAnimal{
  name: string
}interfaceBearextendsAnimal{
  honey: boolean
}

Intersection

Intersection cho phép chúng ta kết hợp nhiều types thành một types duy nhất. Để tạo một intersection types chúng ta dùng &:

type Name ={
  name: string
};

type Age ={
  age: number
};

type Person = Name & Age;

Chúng ta cũng có thể làm điều này với interface:

interfaceName{
  name: “string”
};interfaceAge{
  age: number
};

type Person = Name & Age;

Kết luận

Trong bài viết này mình đã giới thiệu với các bạn về types (type aliases) và interface và một số điểm khác biệt giữa chúng. Dựa theo các trường hợp chúng ta lựa chọn loại nào phù hợp với trường hợp của bạn. Cảm ơn các bạn đã theo dõi bài viết ❤️

Tài liệu tham khảo:

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ