Аннотировать класс с помощью файла объявления? - TypeScript - PullRequest
2 голосов
/ 06 мая 2020

У меня есть декоратор, который добавляет свойство в класс как:

function Service(constructor: any): any {
  constructor.Instance = {};
}

@Service
class MyService {

}

Свойство будет static как public static Instance: MyService, но у меня есть несколько классов, я просто не могу добавьте public static Instance: ServiceType в каждом классе. Я сделал следующее:

class BaseService<T> {
  public static Instance: T; // Static members cannot reference class type parameters.ts(2302)
}

@Service
class MyService extends BaseService<MyService> {

}

Что должно работать, но я получил Static members cannot reference class type parameters.ts(2302), поэтому я попробовал это как:

function BaseService<T>() {
  abstract class BaseService {
    public static Instance: T;
  }
  return BaseService;
}

@Service
class MyService extends BaseService<MyService> { // Type '<T>() => typeof BaseService' is not a constructor function type.ts(2507)

}

это тоже не сработало, поэтому я думаю, можем ли мы создать файл объявления, в котором мы можем объявить класс BaseService как тип, но я не понимаю, как использовать этот тип? implements? extends?, но Тип не может быть расширен или реализован. Поскольку Instance уже существует в классе, мне нужно точно аннотировать класс этим свойством, чтобы я мог получить к нему доступ, как MyService.Instance, и я не хочу явно добавлять его во все классы. Есть предложения?

1 Ответ

1 голос
/ 07 мая 2020

Я выбрал другой способ сделать это, вот ссылка . Короче говоря, функциональность декоратора, которую я делал, немного сложна, но теперь у меня есть другой способ сделать это, так что он решает мой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...