如何获取传递的通用参数的类名
class Sample<T>{
public getTypeName(): void {
alert(T.name)
//or
alert(new T().constructor.name)
}
}
class Person {
public FullName:string
}
new Sample<Person>().getTypeName()
我需要将输出打印为“ Person ”吗?
答案 0 :(得分:0)
虽然在编译时删除了泛型类型,但您可以传入类的构造函数并获取其名称:
class Sample<T>{
public constructor(public tCtor: new (...args:any[]) => T){}
public getTypeName(): void {
console.log(this.tCtor.name)
}
}
class Person {
public FullName!:string
}
new Sample(Person).getTypeName()
答案 1 :(得分:0)
因为我无法评论answer of Titian Cernicova-Dragomir:
只有在调用者的上下文是非泛型的情况下才有意义,而通常情况并非如此。如果我手头只有一个通用参数(例如,在通用类中),即使需要的信息应该在编译时可用,也无法创建其实例化类型的运行时实例或使用实例化类型的名称。时间。对于习惯了C ++模板或Java / C#泛型的人们来说,这是一个遗憾。