获取通用参数传递的打字稿的类名

时间:2018-08-18 08:00:49

标签: typescript generics

如何获取传递的通用参数的类名

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 ”吗?

2 个答案:

答案 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#泛型的人们来说,这是一个遗憾。