gpt4 book ai didi

javascript - 如何在 typescript 中检索类型 T 的泛型类的名称

转载 作者:行者123 更新时间:2023-12-02 21:24:22 24 4
gpt4 key购买 nike

我正在尝试在 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' only refers to a type, but is being used as a value here.

如何检索类型 T 的类的名称。

我对 TypeScript 很陌生,所以如果答案非常简单,我提前道歉。

最佳答案

服务定位器的 get方法必须接收一些可以定位实例的东西。

如果将签名更改为:public static get<T>(fn: Function): T {

然后function type 有一个名为 name 的 prop你可以在 get 里面使用它像这样:

let service = Locator.serviceMap.get(fn.name);

获取类实例的定位器可以通过以下方式调用:

const classInstance = Locator.get<ClassC>(ClassC);

检查这个stackblitz .

关于javascript - 如何在 typescript 中检索类型 T 的泛型类的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60774618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com