我正在尝试在TypeScript中实现服务定位器模式。
这是我的代码:
//due to only partial knowledge of TypeScript
private static serviceMap: Map<string, any>;
public static get<T>(): T {
// firstly lazily register all of the necessary services if this is the
// first time calling get.
if(this.serviceMap == undefined){
this.init();
}
let service = this.serviceMap.get(T.name) //issue
if(service == undefined){
throw Error("You must register the service before retrieving it.")
}
return service;
}
问题在标有问题的行上。如您所见,我正在尝试检索传递给该方法的类的名称。当我尝试呼叫T.name时,出现此错误:
TS2693:“ T”仅表示类型,但在此处用作值。
如何检索T类型的类的名称。
我是TypeScript的新手,所以如果答案非常简单,我会向您道歉。
答案 0 :(得分:1)
服务定位器的get
方法必须接收一些内容,基于这些内容可以定位实例。
如果将签名更改为此:public static get<T>(fn: Function): T {
然后function
类型有一个名为name
的道具,您可以像这样在get
内部使用它:
let service = Locator.serviceMap.get(fn.name);
获取类实例的定位器可以通过以下方式调用:
const classInstance = Locator.get<ClassC>(ClassC);
选中此stackblitz。