Nhảy tới nội dung

Interface (interface)

Interface là kiểu định nghĩa field và method mà class cần implement. Class implement interface để có thể kiểm tra xem có tuân theo tên method và kiểu tham số mà interface yêu cầu hay không.

Trong các ngôn ngữ như Java hay PHP có thể định nghĩa interface, nhưng JavaScript không có cú pháp tương ứng. Ngược lại, TypeScript có interface.

Interface được định nghĩa trong TypeScript, sau khi được sử dụng để kiểm tra compile, sẽ bị xóa trong quá trình sinh ra code JavaScript, nên interface không ảnh hưởng khi chạy JavaScript.

Định nghĩa interface

Trong TypeScript có thể định nghĩa interface bằng từ khóa interface.

ts
interface SomeInterface {
method1(): void;
method2(arg: string): void;
}
ts
interface SomeInterface {
method1(): void;
method2(arg: string): void;
}

Trong TypeScript không chỉ method mà còn có thể định nghĩa public field.

ts
interface SomeInterface {
field: string;
}
ts
interface SomeInterface {
field: string;
}

Interface và structural subtyping

Trong các ngôn ngữ OOP như Java, interface được sử dụng như định nghĩa kiểu trừu tượng của class. Do đó, interface không được sử dụng đơn lẻ mà phát huy hiệu quả khi class cụ thể kế thừa interface và thêm implementation.

Trong TypeScript cũng có thể cho class implement interface, ngoài ra vì TypeScript là structural subtyping nên cũng có thể sử dụng làm type annotation cho object không có quan hệ implement với interface.

ts
interface Person {
name: string;
age: number;
}
 
const tuan: Person = {
name: "Tuan",
age: 12,
};
ts
interface Person {
name: string;
age: number;
}
 
const tuan: Person = {
name: "Tuan",
age: 12,
};

📄️ Structural typing

Đối với ngôn ngữ lập trình, hệ thống kiểu là một chủ đề quan trọng. Hệ thống kiểu là tập hợp các quy tắc gán "kiểu" cho các giá trị và biến khác nhau trong chương trình. Những quy tắc này quyết định tính chất và cách xử lý dữ liệu. Đặc biệt, cách phân biệt giữa các kiểu và ngược lại, cách xác định tính tương thích giữa các kiểu là chủ đề liên quan trực tiếp đến tính dễ sử dụng và an toàn của ngôn ngữ.