types检查与TypeScript

我对TypeScript非常兴奋,所以我开始玩这个游戏。 作为一个脚本开发者,它使得Javascript变得更加困难。

但是,在Actionscript中,可以使用is运算符在运行时检查types:

var mySprite:Sprite = new Sprite(); trace(mySprite is Sprite); // true trace(mySprite is DisplayObject);// true trace(mySprite is IEventDispatcher); // true 

是否有可能检测到一个variables(扩展或)是否与TypeScript是某个类或接口? 在语言规范中我找不到任何关于它的东西,在使用类/接口时应该在那里。


更新:几年后。 我非常快速地删除了TypeScript,并开始使用编译为优秀的JavaScript的Haxe ,并且具有对类,接口等进行实际的types检查。还具有去除死代码,更好的枚举,抽象types和编译时函数(macros)到一个文件,所以不需要复杂的包构build系统。

4.19.4运算符的instanceof

instanceof操作符要求左操作数的types为Any,对象types或types参数types,右操作数的types为Any或“Function”接口types的子types。 结果始终是布尔基元types。

所以你可以使用

 mySprite instanceof Sprite; 

请注意,该运算符也在ActionScript中,但不应该在那里使用:

is运算符是ActionScript 3.0的新增function,允许您testingvariables或expression式是否为给定数据types的成员。 在以前的ActionScript版本中,instanceof运算符提供了此function,但在ActionScript 3.0中,不应使用instanceof运算符来testing数据types成员资格。 应该使用is运算符而不是instanceof运算符来进行手动types检查,因为expression式x instanceof y只是检查x的原型链是否存在y(在ActionScript 3.0中,原型链并不提供完整的inheritance层次结构)。

TypeScript的instanceof共享相同的问题。 因为这是一种仍在发展中的语言,所以我build议你说明这样的设施的build议。

也可以看看:

  • MDN: instanceof

TypeScript有一种在运行时validationvariablestypes的方法。 您可以添加一个返回types谓词的validation函数。 所以你可以在一个if语句中调用这个函数,并且确保该块内的所有代码都可以安全地使用,就像你认为的那样。

来自TypeScript文档的示例:

 function isFish(pet: Fish | Bird): pet is Fish { return (<Fish>pet).swim !== undefined; } // Both calls to 'swim' and 'fly' are now okay. if (isFish(pet)) { pet.swim(); } else { pet.fly(); } 

更多信息,请访问: https : //www.typescriptlang.org/docs/handbook/advanced-types.html