TypeScript: как получить имя класса

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

Метод 1: использование свойства конструктора
Самый простой способ получить имя класса в TypeScript — использовать свойство constructor. Каждый объект в JavaScript имеет свойство constructor, которое ссылается на функцию-конструктор своего класса. Вот пример:

class MyClass {
  constructor() {
    console.log(this.constructor.name);
  }
}
const myObj = new MyClass(); // Output: MyClass

В приведенном выше коде мы создаем класс с именем MyClassи регистрируем свойство constructor.name, которое дает нам имя класса.

Метод 2: использование Object.prototype.toString()
Другой подход — использовать метод Object.prototype.toString(). Этот метод возвращает строковое представление объекта, включая имя его класса. Однако для извлечения только имени класса требуются некоторые манипуляции. Вот пример:

class AnotherClass {}
const obj = new AnotherClass();
const className = Object.prototype.toString.call(obj).slice(8, -1);
console.log(className); // Output: AnotherClass

В этом фрагменте кода мы создаем экземпляр AnotherClassи используем Object.prototype.toString()для получения строкового представления. Затем мы извлекаем имя класса, используя slice().

Метод 3: использование свойства имени конструктора.
В TypeScript классы имеют свойство name, связанное с их функцией-конструктором. Мы можем напрямую получить доступ к этому свойству, чтобы получить имя класса. Вот пример:

class YetAnotherClass {}
const obj = new YetAnotherClass();
const className = obj.constructor.name;
console.log(className); // Output: YetAnotherClass

Здесь мы создаем экземпляр YetAnotherClassи обращаемся к его свойству constructor.name, чтобы получить имя класса.

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

function ClassNameDecorator<T extends { new (...args: any[]): {} }>(constructor: T) {
  return class extends constructor {
    getClassName() {
      return constructor.name;
    }
  };
}
@ClassNameDecorator
class DecoratedClass {}
const obj = new DecoratedClass();
console.log(obj.getClassName()); // Output: DecoratedClass

В этом коде мы определяем декоратор под названием ClassNameDecorator, который добавляет в класс метод getClassName(). Метод возвращает имя класса, используя constructor.name.

В этой статье мы рассмотрели несколько методов получения имени класса в TypeScript. Мы рассмотрели использование свойства constructor, Object.prototype.toString(), прямой доступ к свойству constructor.nameи создание собственного декоратора. Каждый метод имеет свои преимущества и может использоваться в зависимости от конкретных требований вашего проекта. Зная эти методы, вы сможете легко получать имена классов в TypeScript.