Cách sử dụng các lớp TypeScript với các ví dụ đơn giản

TypeScript mang đến những tính năng mạnh mẽ cho JavaScript, bao gồm khái niệm về lớp, cho phép lập trình hướng đối tượng. Lớp cung cấp bản thiết kế để tạo đối tượng, đóng gói dữ liệu và xác định hành vi. Hướng dẫn này sẽ hướng dẫn bạn những điều cơ bản về lớp TypeScript với các ví dụ đơn giản.

Lớp học là gì?

Lớp là bản thiết kế để tạo các đối tượng có thuộc tính và phương thức được xác định trước. Nó giúp tổ chức mã, thúc đẩy khả năng tái sử dụng và tạo các ứng dụng có thể mở rộng. Các lớp trong TypeScript hoạt động tương tự như các lớp trong các ngôn ngữ lập trình hướng đối tượng khác.

Định nghĩa một lớp cơ bản

Để định nghĩa một lớp trong TypeScript, hãy sử dụng từ khóa class theo sau là tên lớp và một cặp dấu ngoặc nhọn chứa các thuộc tính và phương thức.

Ví dụ về lớp cơ bản

Dưới đây là ví dụ về lớp Person đơn giản với các thuộc tính và phương thức:

class Person {
  name: string;
  age: number;

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

  greet(): void {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person1 = new Person("Alice", 30);
person1.greet(); // Output: Hello, my name is Alice and I am 30 years old.

Trong ví dụ này, lớp Person có hai thuộc tính: nameage. Phương thức khởi tạo các thuộc tính này và phương thức greet xuất ra thông điệp chào mừng.

Bộ điều chỉnh quyền truy cập

TypeScript cung cấp ba trình sửa đổi truy cập để kiểm soát khả năng hiển thị của các thành viên lớp:

  • public: Có thể truy cập thành viên từ mọi nơi (mặc định).
  • private: Các thành viên chỉ có thể truy cập trong lớp.
  • protected: Các thành viên có thể truy cập được trong lớp và các lớp con của nó.

Sử dụng Access Modifiers

Sau đây là cách bạn có thể sử dụng trình sửa đổi truy cập trong lớp TypeScript:

class Animal {
  public name: string;
  private age: number;

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

  public getAge(): number {
    return this.age;
  }
}

const dog = new Animal("Buddy", 5);
console.log(dog.name); // Output: Buddy
console.log(dog.getAge()); // Output: 5
// console.log(dog.age); // Error: 'age' is private and only accessible within class 'Animal'.

Trong ví dụ này, name là thuộc tính công khai, có thể truy cập từ bên ngoài lớp, trong khi age là thuộc tính riêng tư, chỉ có thể truy cập trong lớp.

Kế thừa trong TypeScript

TypeScript hỗ trợ tính năng kế thừa, cho phép một lớp kế thừa các thuộc tính và phương thức từ một lớp khác. Điều này giúp tái sử dụng mã và tạo ra một hệ thống phân cấp các lớp.

Ví dụ về thừa kế

Dưới đây là ví dụ về lớp Dog kế thừa từ lớp cơ sở Animal:

class Animal {
  constructor(public name: string) {}

  makeSound(): void {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name); // Call the constructor of the base class
  }

  makeSound(): void {
    console.log(`${this.name} barks.`);
  }
}

const dog = new Dog("Buddy");
dog.makeSound(); // Output: Buddy barks.

Trong ví dụ này, lớp Dog mở rộng lớp Animal và ghi đè phương thức makeSound.

Người nhận và người đặt

TypeScript cho phép bạn định nghĩa phương thức getter và setter cho các thuộc tính, cung cấp quyền truy cập được kiểm soát vào các thành viên lớp.

Ví dụ về Getters và Setters

class Person {
  private _name: string;

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

  get name(): string {
    return this._name;
  }

  set name(newName: string) {
    if (newName) {
      this._name = newName;
    } else {
      console.log("Name cannot be empty.");
    }
  }
}

const person = new Person("Alice");
console.log(person.name); // Output: Alice
person.name = "Bob";
console.log(person.name); // Output: Bob

Trong ví dụ này, thuộc tính name được truy cập và sửa đổi bằng phương thức getter và setter.

Phần kết luận

Các lớp TypeScript là một cách mạnh mẽ để viết mã hướng đối tượng theo cách sạch sẽ và hiệu quả. Chúng cung cấp một cách có cấu trúc để xác định các thuộc tính, phương thức, trình sửa đổi truy cập, kế thừa, v.v. Bằng cách hiểu cách sử dụng các lớp TypeScript, bạn có thể viết mã mạnh mẽ và dễ bảo trì hơn cho các ứng dụng của mình.