Декораторы классов — это мощная функция TypeScript, позволяющая изменять поведение класса на уровне объявления. Они предоставляют возможность расширять или улучшать классы без изменения их исходного исходного кода. В этой статье мы рассмотрим различные методы использования декораторов классов в TypeScript на примерах кода.
- Декоратор базового класса:
Декоратор базового класса — это функция, которая принимает конструктор класса в качестве параметра и возвращает новый конструктор или изменяет существующий. Вот пример:
function classDecorator(constructor: Function) {
return class extends constructor {
newProperty = "new property";
hello = "override";
};
}
@classDecorator
class Example {
property = "property";
hello: string;
}
console.log(new Example().newProperty); // Output: "new property"
console.log(new Example().hello); // Output: "override"
- Фабрика декораторов:
Фабрика декораторов — это функция высшего порядка, которая возвращает функцию декоратора. Он позволяет передавать аргументы декоратору во время его применения. Вот пример:
function decoratorFactory(name: string) {
return function classDecorator(constructor: Function) {
console.log(`Decorating class ${name}`);
};
}
@decoratorFactory("ExampleClass")
class Example {
// class definition
}
- Декоратор свойств.
Декораторы свойств применяются к свойствам класса. Они получают два параметра: прототип класса и имя свойства. Вот пример:
function propertyDecorator(target: any, key: string) {
// modify or enhance the property
console.log(`Decorating property ${key}`);
}
class Example {
@propertyDecorator
propertyName: string;
}
- Декоратор метода:
Декораторы метода применяются к методам класса. Они получают три параметра: прототип класса, имя метода и дескриптор свойства. Вот пример:
function methodDecorator(target: any, key: string, descriptor: PropertyDescriptor) {
// modify or enhance the method
console.log(`Decorating method ${key}`);
}
class Example {
@methodDecorator
methodName() {
// method implementation
}
}
- Декоратор параметров:
Декораторы параметров применяются к параметрам метода или конструктора. Они получают три параметра: прототип класса, имя метода или конструктора и индекс параметра. Вот пример:
function parameterDecorator(target: any, key: string, index: number) {
// modify or enhance the parameter
console.log(`Decorating parameter ${index} of ${key}`);
}
class Example {
methodName(@parameterDecorator parameter: string) {
// method implementation
}
}
Декораторы классов предоставляют гибкий способ изменить или улучшить поведение классов в TypeScript. Их можно использовать для добавления новых свойств, переопределения существующих, украшения методов или изменения параметров. Понимая и эффективно используя декораторы классов, вы сможете писать более модульный и многократно используемый код в своих проектах TypeScript.