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

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

  1. Декоратор класса:
    Декоратор класса применяется к объявлению класса и может использоваться для изменения поведения класса или добавления метаданных. Вот простой пример:
function logger(target: Function) {
  // Modify class behavior or add metadata
  console.log(`Class ${target.name} created.`);
}
@logger
class MyClass {
  // Class implementation
}
  1. Декоратор метода:
    Декоратор метода применяется к методу внутри класса и может использоваться для изменения его поведения или добавления метаданных. Вот пример:
function auditLog(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;
  descriptor.value = function (...args: any[]) {
    console.log(`Method ${propertyKey} called with arguments: ${args}`);
    const result = originalMethod.apply(this, args);
    console.log(`Method ${propertyKey} returned: ${result}`);
    return result;
  };
  return descriptor;
}
class MyClass {
  @auditLog
  myMethod() {
    // Method implementation
  }
}
  1. Декоратор свойства.
    Декоратор свойства применяется к свойству внутри класса и может использоваться для изменения его поведения или добавления метаданных. Вот пример:
function readonly(target: any, propertyKey: string) {
  const descriptor: PropertyDescriptor = {
    writable: false,
  };
  return descriptor;
}
class MyClass {
  @readonly
  myProperty: string = "read-only value";
}
  1. Декоратор параметров:
    Декоратор параметров применяется к параметру внутри метода или конструктора и может использоваться для изменения его поведения или добавления метаданных. Вот пример:
function validate(target: any, propertyKey: string, parameterIndex: number) {
  // Modify parameter behavior or add metadata
  console.log(`Validating parameter ${parameterIndex} of method ${propertyKey}`);
}
class MyClass {
  myMethod(@validate param: string) {
    // Method implementation
  }
}

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

Используя декораторы, вы можете добавлять метаданные, изменять поведение или даже реализовывать сквозные задачи, такие как ведение журнала, кэширование, проверка и многое другое. Включение декораторов в ваши проекты TypeScript может привести к созданию более чистого и удобного в обслуживании кода.

Не забывайте экспериментировать и исследовать различные возможности, которые предлагают декораторы. Декораторы TypeScript позволяют создавать инновационные и эффективные способы формирования кода.