Проверять тип декорированного класса в Typescript? - PullRequest
0 голосов
/ 24 июня 2018

Если мы определим функцию декоратора следующим образом:

  return function IsDefined(object: any, propertyName: string) {
       ....
  ]

Затем украсьте какое-нибудь свойство, как это:

class Test {
  @IsDefined() p1: String = "";
}

И выполнить этот тест внутри декоратора:

  expect(object).to.equal(Test);

Должно ли это пройти? Что такое object?

Это, например, проходит:

const instance:any = new Test();

expect(object.constructor.name).
to.equal(instance.constructor.name);

1 Ответ

0 голосов
/ 24 июня 2018

Первый аргумент свойства decorator всегда является текущим экземпляром класса или конструктора для статических членов. Так что в этом случае object будет Test, вызывается декоратор экземпляра класса.

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

expect(object instanceof Test).toBeTruthy();

или

expect(object.constructor.name).toBe('Test');
...