Triển khai các hằng số của lớp trong TypeScript là một cách để định nghĩa các giá trị không thay đổi, giúp mã nguồn trở nên rõ ràng và dễ bảo trì hơn. Các hằng số này thường được sử dụng để lưu trữ các giá trị cố định mà không thay đổi trong suốt vòng đời của đối tượng. Trong bài viết này, chúng ta sẽ tìm hiểu cách triển khai các hằng số trong lớp, cách sử dụng và các ví dụ minh họa.

1. Khai Báo Hằng Số

Trong TypeScript, bạn có thể khai báo các hằng số trong một lớp bằng cách sử dụng từ khóa readonly. Điều này đảm bảo rằng các giá trị này không thể bị thay đổi sau khi đã được khởi tạo.

Cách Định Nghĩa Hằng Số

Để định nghĩa một hằng số trong lớp, bạn chỉ cần thêm từ khóa readonly trước thuộc tính và gán giá trị cho nó trong phần khởi tạo của lớp hoặc thông qua constructor.

Ví dụ về Hằng Số trong Lớp

class Circle {
    readonly PI: number = 3.14; // Hằng số PI

    constructor(public radius: number) {}

    getArea(): number {
        return this.PI * this.radius * this.radius; // Sử dụng hằng số
    }
}

const circle = new Circle(5);
console.log(`Area: ${circle.getArea()}`); // Kết quả: Area: 78.5

// circle.PI = 3.14159; // Lỗi: Cannot assign to 'PI' because it is a read-only property

Trong ví dụ này, thuộc tính PI được khai báo là một hằng số với từ khóa readonly. Khi cố gắng gán giá trị mới cho PI, TypeScript sẽ ném ra lỗi.

2. Khởi Tạo Hằng Số

Bạn có thể khởi tạo hằng số trong nhiều cách khác nhau, bao gồm:

2.1. Khởi Tạo Trực Tiếp

Hằng số có thể được khởi tạo trực tiếp tại nơi khai báo.

class Rectangle {
    readonly DEFAULT_WIDTH: number = 10; // Hằng số được khởi tạo trực tiếp
    readonly DEFAULT_HEIGHT: number = 5;

    constructor(public width: number = this.DEFAULT_WIDTH, public height: number = this.DEFAULT_HEIGHT) {}
}

const rectangle = new Rectangle();
console.log(`Width: ${rectangle.width}, Height: ${rectangle.height}`); // Kết quả: Width: 10, Height: 5

2.2. Khởi Tạo Qua Constructor

Hằng số cũng có thể được khởi tạo trong constructor, cho phép bạn sử dụng các tham số truyền vào.

class Person {
    readonly birthYear: number;

    constructor(public name: string, birthYear: number) {
        this.birthYear = birthYear; // Khởi tạo hằng số
    }

    getAge(currentYear: number): number {
        return currentYear - this.birthYear; // Sử dụng hằng số
    }
}

const person = new Person("Alice", 1990);
console.log(`${person.name} is ${person.getAge(2024)} years old.`); // Kết quả: Alice is 34 years old.

3. Hằng Số Tĩnh

Ngoài việc định nghĩa hằng số cho các thể hiện của lớp, bạn cũng có thể định nghĩa hằng số tĩnh bằng cách sử dụng từ khóa static. Các hằng số này sẽ thuộc về lớp thay vì thuộc về các thể hiện của lớp.

Ví dụ về Hằng Số Tĩnh

class MathConstants {
    static readonly E: number = 2.718; // Hằng số tĩnh

    static getE(): number {
        return this.E; // Sử dụng hằng số tĩnh
    }
}

console.log(`Euler's number is approximately ${MathConstants.E}`); // Kết quả: Euler's number is approximately 2.718

Trong ví dụ này, hằng số E được khai báo là một hằng số tĩnh và có thể truy cập trực tiếp thông qua lớp mà không cần tạo thể hiện.

4. Kết Luận

Triển khai các hằng số trong lớp TypeScript giúp đảm bảo rằng các giá trị không thay đổi, từ đó làm cho mã nguồn của bạn an toàn và dễ bảo trì hơn. Bằng cách sử dụng từ khóa readonly, bạn có thể định nghĩa các hằng số cho các thể hiện của lớp hoặc các hằng số tĩnh cho lớp. Việc sử dụng hằng số không chỉ làm cho mã nguồn trở nên rõ ràng hơn mà còn tăng tính linh hoạt trong việc quản lý các giá trị không thay đổi.