我的通用课程
export class BaseService<T> {
public subUrl;
constructor(public repo:RepogitoryService) { }
}
如何将T的类名存储在局部变量上?
答案 0 :(得分:12)
你必须明白,Typescript只是一个转换器(编译器到javascript)。一些语法糖(例如泛型)仅在类型检查阶段起作用(并且它对IDE /文本编辑器中的intellisense有帮助。)
然而,对变量的赋值发生在运行时,在运行时它只是一个简单的Javascript。运行时没有类型也没有泛型。
但这是我最简单的方法:
class Some<T> {
private TName : string;
constructor(x : T&Function) {
this.TName = x.name;
}
}
class Another {
}
const some = new Some<Another>(Another);
答案 1 :(得分:6)
durisvk10的变通方法涵盖了该主题,只是想补充一点,我宁愿使用
x: new () => T
比x: T&Function
。
赞:
...
constructor(x : new () => T) {
this.TName = x.name;
}
...
答案 2 :(得分:5)
不幸的是,你不能。 Typescript是一个静态类型检查器,在runetime不支持类型反射,例如java。这是因为它的来源被转换为javascript。
然而,未来有这种支持的希望,有一个名为&#34; custom transformers&#34;的新打字稿功能。那些变换器是插入蒸发过程的插件,打开了关于类型反射的丰富功能的道路。第一个例子是ts-transformer-keys
。
答案 3 :(得分:0)
将对象投射到Object
并获取构造函数名称?
function nameOf(object: Object): string {
return object.constructor.name;
}