我的泛型类
export class BaseService<T> {
public subUrl;
constructor(public repo:RepogitoryService) { }
}
我该如何将T的类名存储在本地变量中?
我的泛型类
export class BaseService<T> {
public subUrl;
constructor(public repo:RepogitoryService) { }
}
我该如何将T的类名存储在本地变量中?
你必须明白,TypeScript只是一个转译器(将代码编译成JavaScript)。其中一些语法糖(例如泛型)仅在类型检查阶段起作用(并且对于IDE/文本编辑器中的智能感知非常有帮助)。
然而,在运行时进行变量赋值,实际上就是普通的JavaScript。在运行时,没有类型和泛型。
但以下是我会采取的最简单方法:
class Some<T> {
private TName : string;
constructor(x : T&Function) {
this.TName = x.name;
}
}
class Another {
}
const some = new Some<Another>(Another);
durisvk10提供的解决方法已经涉及到了这个主题,我想补充一点:我更倾向于使用x: new () => T
而不是x: T&Function
。
像这样:
...
constructor(x : new () => T) {
this.TName = x.name;
}
...
ts-transformer-keys
。Object
并获取构造函数名称?function nameOf(object: Object): string {
return object.constructor.name;
}
Typescript会在生成的JavaScript中移除所有的类型信息(包括运行时期),但是由于Typescript提供的“转换器”特性,现在可以编写一个转换器来在运行时期暴露这些信息。我已经做到了这一点,可以参见https://typescript-rtti.org/ - 不需要装饰器,而且它比emitDecoratorMetadata更加全面。
Another
中有一些字段,这似乎无法正常工作。 - Marian Simonca