Câu hỏi phỏng vấn Typescript
Câu hỏi

Giải thích cách thức và lý do tại sao chúng ta có thể sử dụng Property decorators trong TypeScript?

Câu trả lời

Trong TypeScript, Property decorators là một tính năng mạnh mẽ cho phép chúng ta thêm metadata hoặc thay đổi hành vi của một property trong một class mà không cần phải sửa đổi code của class đó. Cách thức và lý do sử dụng property decorators có thể được giải thích như sau:

Cách Thức Sử Dụng

Property decorators là một hàm được gọi tại thời điểm định nghĩa class, không phải tại thời điểm tạo instance từ class. Decorator này nhận vào ít nhất hai tham số: target và propertyKey. Target là prototype của class nếu là instance property, hoặc là chính constructor function của class nếu là static property. PropertyKey là tên của property được decorate.

Ví dụ, một property decorator đơn giản có thể được tạo ra để kiểm tra độ dài tối thiểu của một chuỗi:

typescript Copy
function MinLength(length: number) {
    return function(target: any, propertyKey: string) {
        let value: string;

        const getter = function() {
            return value;
        };

        const setter = function(newVal: string) {
            if (newVal.length < length) {
                throw new Error(`Độ dài của ${propertyKey} phải ít nhất là ${length} ký tự.`);
            }
            value = newVal;
        };

        Object.defineProperty(target, propertyKey, {
            get: getter,
            set: setter,
            enumerable: true,
            configurable: true
        });
    };
}

Trong ví dụ trên, decorator MinLength được sử dụng để đảm bảo rằng giá trị của property phải có độ dài tối thiểu nhất định[4].

Lý Do Sử Dụng

  1. Tăng Tính Tái Sử Dụng và Rõ Ràng: Decorators giúp tăng tính tái sử dụng của code bằng cách tách biệt logic kiểm tra hoặc thay đổi hành vi ra khỏi logic ...
middle

middle

Gợi ý câu hỏi phỏng vấn

senior

Triple-Slash Directive trong typescript là gì

middle

Sự khác biệt giữa enumconst enum là gì?

junior

Type Erasure trong TypeScript là gì?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào