如何获得打字稿的Generic class <t>名称?

时间:2017-11-15 16:07:01

标签: typescript

我的通用课程

 export class BaseService<T> {
 public subUrl;
 constructor(public repo:RepogitoryService) { }
}

如何将T的类名存储在局部变量上?

4 个答案:

答案 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 () => Tx: 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;
}
相关问题