作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 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/
我是一名优秀的程序员,十分优秀!