【发布时间】:2020-05-06 13:40:00
【问题描述】:
我有一个装饰器,它将一个属性添加到类中:
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),所以我尝试this:
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?,但 Type 无法扩展或实现。由于Instance 已经存在于类中,所以我需要用该属性注释类,以便我可以像MyService.Instance 一样访问它,并且我不想在所有类中显式添加。有什么建议吗?
【问题讨论】:
标签: typescript