使用TypeScript 1.6可以编写函数来根据接口检查对象。 (下面是从MSDN的anncouncement以及如何使用它。)用户定义的类型警卫[打字稿]
我的问题主攻返回表达式return a.name === 'kitty';
:
- 播放它的作用是什么?
- 必须所有的猫都叫猫咪吗?
用户定义类型警卫
[http://blogs.msdn.com/b/typescript/archive/2015/09/16/announcing-typescript-1-6.aspx]
在早期版本的打字稿的,你可以if语句 缩小型使用。例如,你可以使用:
if (typeof x === "number") { … }
这有助于键入信息流与在运行时 类型(由一些其他项目做 类型检查JS的启发)工作的常用方法。虽然这种方法非常强大,但我们希望 可以进一步推进。在1.6,您现在可以创建自己的类型后卫 功能:
interface Animal {name: string; } interface Cat extends Animal { meow(); } function isCat(a: Animal): a is Cat { return a.name === 'kitty'; } var x: Animal; if(isCat(x)) { x.meow(); // OK, x is Cat in this block }
这可以让你不仅typeof运算和instanceof检查工作, 这需要一个JavaScript能够理解一个类型,但现在你可以工作 与接口并进行自定义分析。保护函数被表示为 ,它们的“a是X”返回类型,如果现在的预期类型是什么,则返回布尔值和信号给编译器。
另一个例子可以找到[这里](http://stackoverflow.com/questions/32680394/how-to-预防/ assiging-similar-types/32680710#32680710) – thoughtrepo
顺便说一句,这似乎是一个更清晰的例子:[TS Deep Dive](https://basarat.gitbooks.io/typescript/content/docs/types/typeGuard。 html),特别是'isFoo'。 – superjos