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

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

  1. Базовый декоратор класса:
    Декоратор класса — это функция, которая принимает конструктор класса в качестве аргумента и возвращает либо новый конструктор, либо изменяет существующий конструктор. Вот пример:
function Logger(target: Function) {
  console.log('Decorating class:', target.name);
}
@Logger
class MyClass {
  // Class implementation
}
  1. Фабрики декораторов:
    Фабрика декораторов — это функция, которая возвращает декоратор класса. Он позволяет передавать аргументы функции декоратора. Вот пример:
function Loggable(logLevel: string) {
  return function(target: Function) {
    console.log(`Decorating class: ${target.name}, Log level: ${logLevel}`);
  };
}
@Loggable('info')
class MyLoggedClass {
  // Class implementation
}
  1. Декоратор метода экземпляра:
    Декоратор метода экземпляра — это функция, которая применяется к определенному методу класса. Его можно использовать для изменения поведения метода, добавления метаданных или выполнения дополнительных операций. Вот пример:
function MeasureExecutionTime(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;
  descriptor.value = function(...args: any[]) {
    console.time(propertyKey);
    const result = originalMethod.apply(this, args);
    console.timeEnd(propertyKey);
    return result;
  };
  return descriptor;
}
class MyMathClass {
  @MeasureExecutionTime
  calculateSum(a: number, b: number): number {
    return a + b;
  }
}
  1. Декоратор статических методов:
    Подобно декораторам методов экземпляра, декораторы статических методов применяются к статическим методам класса. Вот пример:
function ValidateInput(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;
  descriptor.value = function(...args: any[]) {
    for (const arg of args) {
      if (typeof arg !== 'number') {
        throw new Error('Invalid input type!');
      }
    }
    return originalMethod.apply(this, args);
  };
  return descriptor;
}
class MyMathClass {
  @ValidateInput
  static calculateSum(a: number, b: number): number {
    return a + b;
  }
}

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