Пользовательский декоратор в TypeScript - PullRequest
1 голос
/ 30 марта 2020

Как получить доступ к переменным класса, в котором вызывается декоратор?

@TestDecorator()
export class AppController {
    private testData: number  = 15;
}

export const TestDecorator = (options: ICrudConfig) => (target: Object) => {
  console.log(target.prototype.testData);
};

target.prototype.testData не определен

Заранее спасибо

1 Ответ

2 голосов
/ 30 марта 2020

Декоратор класса Typescript делает c Объясните это. ваш декоратор класса позволяет расширять и изменять конструктор, вы не можете напрямую обращаться к прототипу класса и изменять его.

Попробуйте войти в консоль своей цели, чтобы увидеть, к чему вы можете получить доступ;)

My Рекомендация: попробуйте вернуть класс, который расширяет вашу цель.

Помните, что декоратор класса вычисляется до создания экземпляра класса, поэтому вы сможете переопределять методы и константы, но не сможете получить доступ к переменным, которые будут созданы позже при выполнении.

export const TestDecorator = (options: ICrudConfig) => (target: Object) => {
  return class extends target { // returns a new class extending the decorated one;
    constructor {
      super();
      console.log(this.testData);
    }
  };
};
...