Typeof / instanceof类型别名

时间:2016-03-02 11:26:56

标签: typescript

我想知道是否有可能确定打字稿中对象的类型。请考虑以下示例:

type T = [number, boolean];

class B {
    foo: T = [3, true];

    bar(): boolean {
        return this.foo instanceof T;
    }
}

typeof运算符似乎不是解决方案,也不是instanceof。

2 个答案:

答案 0 :(得分:3)

要添加到 @vilcvane 的回答:typesinterfaces在编译期间消失,但​​仍有一些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);

This makes sense if you look at how TypeScript is generating the output JavaScript in each of these examples

答案 1 :(得分:2)

简短回答

(几乎)编译后删除所有类型信息,并且您不能使用instanceof运算符和操作数(在您的示例中为T在运行时不存在

答案很长

TypeScript中的标识符可以属于以下一个或多个组: type value namespace 。由于JavaScript是 value 组中的标识符而发出的内容。

因此,运行时运算符仅适用于。因此,如果您想对foo的值进行运行时类型检查,那么您需要自己做一些艰苦的工作。

有关详细信息,请参阅此部分:http://www.typescriptlang.org/Handbook#declaration-merging