У меня есть декоратор, который добавляет свойство в класс как:
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
, и я не хочу явно добавлять его во все классы. Есть предложения?