【发布时间】:2018-04-27 16:57:28
【问题描述】:
我认为不可能,但值得一问。 在泛型方法或类中,我想记录已使用的泛型 T 类型的名称,我需要它作为字符串。
想象一个这样的方法:
static getTypeName<T>(): string {
return typeof T; // This is wrong
}
我希望能够以这种方式使用它:
let m = getTypeName<Message>(); // Expected string "Message"
let p = getTypeName<Person>(); // Expected string "Person"
上面的 getTypeName 是错误的,它甚至不会构建。 typeof 会在 JS 中转译,不会产生预期的效果。 我尝试了各种方法,但都没有成功。
有什么方法可以实现吗?
编辑:为什么这不是重复的:this question
问题和示例代码显示了如何取回对象而不是指定类型的名称。 该方法也不是通用的,因为如果您尝试传入具有构造函数参数的类型,它将显示错误: “[ts] 'typeof MyType' 类型的参数不能分配给 'new () => MyType' 类型的参数。” 此外,如果您在泛型方法中使用该函数,则不能使用 T 作为参数,这意味着我需要从泛型类型中获取名称的任何地方,都需要将 ctor 添加到参数中。
【问题讨论】:
标签: typescript types