Interface và Type
Cú pháp chung
Trong TypeScript, interface định nghĩa cấu trúc của đối tượng, chỉ định tên và kiểu của các thuộc tính hoặc phương thức mà một đối tượng phải có. Cú pháp thông thường để định nghĩa interface trong TypeScript như sau:
interface InterfaceName { property1: Type1; // ... method1(arg1: ArgType1, arg2: ArgType2): ReturnType; // ...}Tương tự với định nghĩa type:
type TypeName = { property1: Type1; // ... method1(arg1: ArgType1, arg2: ArgType2): ReturnType; // ...};interface InterfaceName hoặc type TypeName: Định nghĩa tên của interface.
property1: Type1: Chỉ định các thuộc tính của interface cùng các kiểu tương ứng. Có thể định nghĩa nhiều thuộc tính, mỗi thuộc tính được phân tách bằng dấu chấm phẩy.
method1(arg1: ArgType1, arg2: ArgType2): ReturnType;: Chỉ định các phương thức của interface. Phương thức được định nghĩa bằng tên, tiếp theo là danh sách tham số trong dấu ngoặc đơn và kiểu trả về. Có thể định nghĩa nhiều phương thức, mỗi phương thức được phân tách bằng dấu chấm phẩy.
Ví dụ về interface:
interface Person { name: string; age: number; greet(): void;}Ví dụ về type:
type TypeName = { property1: string; method1(arg1: string, arg2: string): string;};Trong TypeScript, type được dùng để định nghĩa hình dạng của dữ liệu và thực thi kiểm tra kiểu. Có một số cú pháp phổ biến để định nghĩa type trong TypeScript tùy theo trường hợp sử dụng cụ thể. Dưới đây là một số ví dụ:
Kiểu cơ bản
let myNumber: number = 123; // number typelet myBoolean: boolean = true; // boolean typelet myArray: string[] = ['a', 'b']; // array of stringslet myTuple: [string, number] = ['a', 123]; // tupleĐối tượng và Interface
const x: { name: string; age: number } = { name: 'Simon', age: 7 };Union Type và Intersection Type
type MyType = string | number; // Union typelet myUnion: MyType = 'hello'; // Can be a stringmyUnion = 123; // Or a number
type TypeA = { name: string };type TypeB = { age: number };type CombinedType = TypeA & TypeB; // Intersection typelet myCombined: CombinedType = { name: 'John', age: 25 }; // Object with both name and age properties