意思是你不能用这种东西?
class Helpers
{
static ObjectAs<T>(val: any): T {
if (!(val instanceof T)) {
return null;
}
return <T>val;
}
}
有什么解决方法可以获取泛型声明的基础类型吗?
更新1:
正如Ryan Cavanaugh所提到的,在编译时,整个类型系统被擦除,更像是Java对Generics的实现,我相信.Net实现Generics在编译后的代码中保留类型信息要比Java好,然而,我不禁想知道为什么不可能在TypeScript中允许泛型类型和泛型类型参数的完全运行时自检?为什么TypeScript的设计者决定在运行时删除所有泛型类型信息?
下面的TypeScript代码:
function As<T>(n: any): T {
if (n instanceof T) {
return n;
} else {
return null;
}
}
var obj: Object = 1;
var x = As<number>(obj);
可以转换为以下JavaScript代码:
function As(n, T) {
if (n instanceof T) {
return n;
} else {
return null;
}
}
var obj = 1;
var x = As(obj, Number);
在运行时保留类型信息,并与js代码兼容!
**更新2:**我已经在CodePlex上发布了这个问题,希望从TypeScript的人https://typescript.codeplex.com/discussions/550262那里得到更多
1条答案
按热度按时间u91tlkcl1#
类型系统被完全擦除。你可以在任何泛型函数的生成代码中看到这一点。
也就是说,对于类,仍然有一些运行时信息。你可以这样写: