使用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