我想知道是否有可能确定打字稿中对象的类型。请考虑以下示例:
type T = [number, boolean];
class B {
foo: T = [3, true];
bar(): boolean {
return this.foo instanceof T;
}
}
typeof运算符似乎不是解决方案,也不是instanceof。
答案 0 :(得分:3)
要添加到 @vilcvane 的回答:types
和interfaces
在编译期间消失,但仍有一些class
信息可用。因此,例如,这不起作用:
interface MyInterface { }
var myVar: MyInterface = { };
// compiler error: Cannot find name 'MyInterface'
console.log(myVar instanceof MyInterface);
但这样做:
class MyClass { }
var myVar: MyClass = new MyClass();
// this will log "true"
console.log(myVar instanceof MyClass);
但是,重要的是要注意这种测试可能会产生误导,即使您的代码编译时没有错误:
class MyClass { }
var myVar: MyClass = { };
// no compiler errors, but this logs "false"
console.log(myVar instanceof MyClass);
答案 1 :(得分:2)
简短回答
(几乎)编译后删除所有类型信息,并且您不能使用instanceof
运算符和操作数(在您的示例中为T
)在运行时不存在强>
答案很长
TypeScript中的标识符可以属于以下一个或多个组: type , value , namespace 。由于JavaScript是 value 组中的标识符而发出的内容。
因此,运行时运算符仅适用于值。因此,如果您想对foo
的值进行运行时类型检查,那么您需要自己做一些艰苦的工作。
有关详细信息,请参阅此部分:http://www.typescriptlang.org/Handbook#declaration-merging