意思是你不能用这样的东西?
class Helpers
{
static ObjectAs<T>(val: any): T {
if (!(val instanceof T)) {
return null;
}
return <T>val;
}
}可以找到泛型声明的基本类型吗?
更新1:
正如Ryan所提到的,在编译时,整个类型系统将被删除,更像是Java的泛型实现。我认为在编译代码中保留类型信息的泛型的.Net实现比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 people https://typescript.codeplex.com/discussions/550262那里得到更多信息
发布于 2014-06-28 20:51:45
类型系统被完全擦除。您可以在为任何泛型函数生成的代码中看到这一点。
尽管如此,对于类,仍然有一些运行时信息。你可以写这个:
class A { }
class B { }
function As<T>(n: any, type: { new(...args: any[]): T }): T {
if(n instanceof type) {
return n;
} else {
return null;
}
}
var x = new A();
var y = new B();
console.log(As(x, A));
console.log(As(x, B));https://stackoverflow.com/questions/24469856
复制相似问题