Что такое декораторы в TypeScript?
В TypeScript декораторы - это специальные функции, которые позволяют добавлять дополнительное поведение или изменять функциональность классов, методов, свойств и других элементов языка на этапе компиляции.
Декораторы используются для добавления аннотаций или метаданных к элементам TypeScript, что позволяет программистам расширять или изменять их поведение. Они представляют собой вызываемые функции или выражения, которые применяются с использованием символа @
перед целевым элементом.
Примеры декораторов могут включать следующие сценарии:
- Декоратор класса:
function logClass(target: any) {
console.log('Class Decorator')
}
@logClass
class MyClass {
// Код класса
}
В приведенном примере функция-декоратор logClass
применяется к классу MyClass
с помощью @logClass
. При компиляции или выполнении этого кода будет выведено сообщение "Class Decorator".
- Декоратор метода:
function logMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
console.log('Method Decorator')
}
class MyClass {
@logMethod
myMethod() {
// Код метода
}
}
В этом примере функция-декоратор logMethod
применяется к методу myMethod
класса MyClass
. При вызове myMethod
будет выведено сообщение "Method Decorator".
- Декоратор свойства:
function logProperty(target: any, propertyKey: string) {
console.log('Property Decorator')
}
class MyClass {
@logProperty
myProperty: string
}
Здесь функция-декоратор logProperty
применяется к свойству myProperty
класса MyClass
. При создании экземпляра MyClass
будет выведено сообщение "Property Decorator".
- Декоратор параметра метода:
function logParameter(target: any, propertyKey: string, parameterIndex: number) {
console.log('Parameter Decorator')
}
class MyClass {
myMethod(@logParameter param: string) {
// Код метода
}
}
В этом примере функция-декоратор logParameter
применяется к параметру param
метода myMethod
класса MyClass
. При вызове myMethod
будет выведено сообщение "Parameter Decorator".
Декораторы предоставляют мощный инструмент для расширения и изменения функциональности TypeScript. Они широко используются в Angular и других фреймворках для добавления дополнительной логики, метаданных и аспектов в приложениях на основе TypeScript.