Изучение декораторов классов в TypeScript: подробное руководство

Декораторы классов — это мощная функция TypeScript, позволяющая изменять поведение класса на уровне объявления. Они предоставляют возможность расширять или улучшать классы без изменения их исходного исходного кода. В этой статье мы рассмотрим различные методы использования декораторов классов в TypeScript на примерах кода.

  1. Декоратор базового класса:
    Декоратор базового класса — это функция, которая принимает конструктор класса в качестве параметра и возвращает новый конструктор или изменяет существующий. Вот пример:
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"
  1. Фабрика декораторов:
    Фабрика декораторов — это функция высшего порядка, которая возвращает функцию декоратора. Он позволяет передавать аргументы декоратору во время его применения. Вот пример:
function decoratorFactory(name: string) {
  return function classDecorator(constructor: Function) {
    console.log(`Decorating class ${name}`);
  };
}
@decoratorFactory("ExampleClass")
class Example {
  // class definition
}
  1. Декоратор свойств.
    Декораторы свойств применяются к свойствам класса. Они получают два параметра: прототип класса и имя свойства. Вот пример:
function propertyDecorator(target: any, key: string) {
  // modify or enhance the property
  console.log(`Decorating property ${key}`);
}
class Example {
  @propertyDecorator
  propertyName: string;
}
  1. Декоратор метода:
    Декораторы метода применяются к методам класса. Они получают три параметра: прототип класса, имя метода и дескриптор свойства. Вот пример:
function methodDecorator(target: any, key: string, descriptor: PropertyDescriptor) {
  // modify or enhance the method
  console.log(`Decorating method ${key}`);
}
class Example {
  @methodDecorator
  methodName() {
    // method implementation
  }
}
  1. Декоратор параметров:
    Декораторы параметров применяются к параметрам метода или конструктора. Они получают три параметра: прототип класса, имя метода или конструктора и индекс параметра. Вот пример:
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.