Що таке декоратори в TypeScript?
Декоратори — це спеціальні функції, які можна застосовувати до класів, методів, властивостей або параметрів, щоб додати або змінити поведінку під час виконання або компіляції.
Декоратори є своєрідними "анотаціями" або "модифікаторами", які працюють на рівні метаданих.
Щоб працювати з декораторами, потрібно увімкнути прапорці:
json
{
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}Де можна використовувати декоратори?
- Класи
- Методи
- Властивості
- Параметри
- Аксесори (get/set)
Приклад: Декоратор класу
typescript
function Logger(constructor: Function) {
console.log(`Клас створено: ${constructor.name}`);
}
@Logger
class User {
constructor(public name: string) {}
}Декоратор Logger буде викликано під час визначення класу User, виводячи ім'я конструктора.
Приклад: Декоратор методу
typescript
function LogMethod(
target: any,
propertyKey: string,
descriptor: PropertyDescriptor
) {
const original = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Метод ${propertyKey} викликано з`, args);
return original.apply(this, args);
};
}
class MathService {
@LogMethod
sum(a: number, b: number) {
return a + b;
}
}Цей декоратор веде облік викликів методу та його аргументів.
Приклад: Декоратор пропси
typescript
function Readonly(target: any, propertyKey: string) {
Object.defineProperty(target, propertyKey, {
writable: false,
});
}
class Config {
@Readonly
version = "1.0";
}Властивість version тепер неможливо змінити.
Приклад: Декоратор параметра
typescript
function LogParam(target: Object, propertyKey: string | symbol, parameterIndex: number) {
console.log(`Параметр методу ${String(propertyKey)} на позиції ${parameterIndex}`);
}
class Example {
test(@LogParam msg: string) {
console.log(msg);
}
}Використовується рідко, але може бути корисним для валідації або ведення обліку.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.