Classes trong TypeScript

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 29 tháng 1, 2025

Lập trình hướng đối tượng (OOP) là một phần quan trọng trong TypeScript. TypeScript mở rộng JavaScript với các tính năng mạnh mẽ như class, kế thừa, và ghi đè phương thức, giúp tổ chức và tái sử dụng mã dễ dàng hơn.

Bài này sẽ hướng dẫn bạn cách tạo và sử dụng class, khai báo thuộc tínhphương thức, cũng như cách kế thừaghi đè phương thức trong TypeScript.

1. Tạo và sử dụng class trong TypeScript

Trong TypeScript, class được sử dụng để tạo các đối tượng có thuộc tính và phương thức riêng.

1.1. Khai báo class

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  introduce(): string {
    return `Xin chào, tôi là ${this.name}, ${this.age} tuổi.`;
  }
}

const person1 = new Person("An", 25);
console.log(person1.introduce()); // Output: Xin chào, tôi là An, 25 tuổi.
  • name: string; age: number; → Khai báo thuộc tính của class.
  • constructor(name: string, age: number) → Hàm khởi tạo, chạy khi tạo đối tượng mới.
  • introduce() → Phương thức trả về chuỗi giới thiệu bản thân.

2. Các thuộc tính và phương thức của class

2.1. Các mức độ truy cập (public, private, protected)

TypeScript hỗ trợ các modifier để kiểm soát quyền truy cập vào thuộc tính hoặc phương thức.

Modifier Ý nghĩa
public Mặc định, có thể truy cập từ bên ngoài class
private Chỉ có thể truy cập bên trong class
protected Có thể truy cập trong class và class con

Ví dụ:

class Car {
  public brand: string; // Có thể truy cập từ bên ngoài
  private engine: string; // Chỉ có thể truy cập bên trong class
  protected year: number; // Có thể truy cập trong class con

  constructor(brand: string, engine: string, year: number) {
    this.brand = brand;
    this.engine = engine;
    this.year = year;
  }

  getEngine(): string {
    return this.engine; // Có thể truy cập private bên trong class
  }
}

const car1 = new Car("Toyota", "V6", 2023);
console.log(car1.brand); // ✅ Hợp lệ
console.log(car1.getEngine()); // ✅ Hợp lệ
// console.log(car1.engine); ❌ Lỗi vì engine là private

2.2. Sử dụng phương thức getter và setter

Getter và setter giúp kiểm soát việc truy cập vào các thuộc tính private.

class Account {
  private balance: number = 0;

  get getBalance(): number {
    return this.balance;
  }

  set deposit(amount: number) {
    if (amount > 0) {
      this.balance += amount;
    }
  }
}

const myAccount = new Account();
myAccount.deposit = 1000; // Gửi tiền
console.log(myAccount.getBalance); // Output: 1000
  • get getBalance() → Trả về giá trị của balance (getter).
  • set deposit(amount: number) → Thay đổi giá trị balance (setter).

3. Sử dụng tính kế thừa (extends) và ghi đè (override)

3.1. Kế thừa (extends)

Class con có thể kế thừa thuộc tính và phương thức của class cha bằng từ khóa extends.

class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  makeSound(): void {
    console.log("Động vật phát ra âm thanh");
  }
}

class Dog extends Animal {
  breed: string;

  constructor(name: string, breed: string) {
    super(name); // Gọi constructor của class cha
    this.breed = breed;
  }

  bark(): void {
    console.log(`${this.name} sủa gâu gâu!`);
  }
}

const dog1 = new Dog("Buddy", "Golden Retriever");
dog1.makeSound(); // Output: Động vật phát ra âm thanh
dog1.bark(); // Output: Buddy sủa gâu gâu!
  • class Dog extends AnimalDog kế thừa Animal.
  • super(name) → Gọi constructor của class cha.
  • Dog có thể gọi cả makeSound() của Animal và phương thức riêng bark().

3.2. Ghi đè phương thức (override)

Class con có thể ghi đè phương thức của class cha bằng cách định nghĩa lại phương thức đó.

class Cat extends Animal {
  makeSound(): void {
    console.log(`${this.name} kêu meo meo!`);
  }
}

const cat1 = new Cat("Mèo Con");
cat1.makeSound(); // Output: Mèo Con kêu meo meo!
  • makeSound() trong Cat ghi đè phương thức của Animal.

3.3. Dùng super.method() để gọi phương thức của class cha

Nếu muốn giữ lại chức năng của class cha nhưng bổ sung thêm tính năng mới, có thể dùng super.method().

class Bird extends Animal {
  makeSound(): void {
    super.makeSound(); // Gọi phương thức của class cha
    console.log(`${this.name} hót líu lo!`);
  }
}

const bird1 = new Bird("Chim Vàng Anh");
bird1.makeSound();
// Output:
// Động vật phát ra âm thanh
// Chim Vàng Anh hót líu lo!
  • super.makeSound() → Gọi phương thức makeSound() của Animal.

4. Tổng kết

Tính năng Cách sử dụng
Tạo class class Person {}
Hàm khởi tạo (constructor) constructor(name: string) { this.name = name; }
Mức độ truy cập public, private, protected
Getter và Setter get getBalance() { return this.balance; }
Kế thừa (extends) class Dog extends Animal {}
Ghi đè phương thức (override) makeSound(): void {}
Gọi phương thức class cha super.methodName();

TypeScript giúp lập trình hướng đối tượng mạnh mẽ hơn với các tính năng class, extends, và override.

Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ