Функции Angular ClassDecorator не видны аннотированному классу

Я работаю с декоратором, который дополняет компоненты дополнительными функциями.

      export function I18n(): ClassDecorator {
  return function (constructor: any) {
    constructor.prototype.interpolate = function (
      template: string,
      replacements: any
    ) {
      return service.interpolate(template, replacements);
    };

    constructor.prototype.stringForKeyPath = function (key: string) {
      return service.stringForKeyPath(key);
    };
  };
}

он используется в компонентах

      @I18n()
export class AComponent implements OnInit {

   aMethod() {
      this.interpolate(templateString, replacements)
   }
}

или прямо в шаблонах:

      {{ stringForKeyPath(aKey)}}

Когда код запускается, все это работает нормально

Но ошибки Typescript, потому что он не понимает, что эти функции добавляются классом декоратора

Если я просто добавлю заполнители в AComponent

      @I18n()
export class AComponent implements OnInit {
   interpolate(a: string ,b)=>{return a}

   stringForKeyPath(a: string)=>{return a}

   aMethod() {
      this.interpolate(templateString, replacements)
   }
}

тогда это работает, но это некрасиво, и его нужно будет добавлять в каждый файл, который его использует.

Как я могу добавить правильную типизацию для поведения, добавленного через ClassDecorator?

0 ответов

Другие вопросы по тегам