Trong TypeScript, classes và interfaces đều đóng vai trò quan trọng trong việc định nghĩa cấu trúc và mô hình cho ứng dụng, nhưng chúng có những mục đích và chức năng khác nhau. Dưới đây là các điểm khác biệt chính giữa classes và interfaces trong TypeScript:
Ví dụ về Class:
class Animal { name: string; constructor(name: string) { this.name = name; } speak(): void { console.log(`${this.name} makes a sound.`); } } const dog = new Animal("Dog"); dog.speak(); // "Dog makes a sound."
Ví dụ về Interface:
interface Animal { name: string; speak(): void; } let cat: Animal = { name: "Cat", speak: () => console.log("Meow!") }; cat.speak(); // "Meow!"
Ví dụ:
interface Vehicle { speed: number; move(): void; } class Car implements Vehicle { speed: number; constructor(speed: number) { this.speed = speed; } move(): void { console.log(`The car is moving at ${this.speed} km/h.`); } } const car = new Car(100); car.move(); // "The car is moving at 100 km/h."
Ví dụ:
interface Animal { eat(): void; } interface Mammal { walk(): void; } class Human implements Animal, Mammal { eat(): void { console.log("Eating"); } walk(): void { console.log("Walking"); } }
public
, private
, và protected
, giúp kiểm soát mức độ truy cập đến các thành viên của class.public
).Ví dụ:
class Person { private name: string; // Chỉ có thể truy cập từ bên trong class Person constructor(name: string) { this.name = name; } getName(): string { return this.name; } } const john = new Person("John"); // console.log(john.name); // Lỗi vì name là private console.log(john.getName()); // Hợp lệ
new
. Điều này cho phép tạo nhiều đối tượng dựa trên một class.Ví dụ về tạo đối tượng với class:
class Dog { name: string; constructor(name: string) { this.name = name; } } const myDog = new Dog("Buddy"); // Tạo một thực thể của class Dog
Ví dụ interface không thể tạo đối tượng:
interface Dog { name: string; } // const myDog = new Dog(); // Lỗi: Interface không thể khởi tạo
Tóm lại, classes trong TypeScript giúp định nghĩa cả cấu trúc và logic của đối tượng, hỗ trợ việc kế thừa, đóng gói và các tính năng lập trình hướng đối tượng khác. Interfaces, ngược lại, chỉ mô tả cấu trúc dữ liệu và không chứa logic thực thi. Chúng ta sử dụng interface khi muốn đảm bảo rằng các đối tượng hoặc lớp có hình dạng và hành vi nhất định mà không yêu cầu việc triển khai cụ thể.