2016-05-11 16 views
2

私は次のようなユーザー定義型のガードを書いていた場合:ユーザ定義の型ガードは `any`型では動作しませんか?

interface Cat { 
    meow:() => void; 
} 

function isCat(a: any): a is Cat { 
    return a.name === 'kitty'; 
} 

var x: Cat|{}; 
if(isCat(x)) { 
    x.meow(); // OK, x is Cat in this block 
} 

活字体は、上記ifブロック内xの種類を把握することができます。

enter image description here

私は、コードを変更する場合は、:

var x; // No type here. It's an "any" for now. 
if(isCat(x)) { 
    x.meow(); // What!? It's type `any`?? 
} 

活字体xも型ガードif文の "安全性" の中に、anyであることを前提としています。

enter image description here

+0

関連:http://stackoverflow.com/questions/36940687/why-does-typescript-not-narrow-the-any-type-in​​-this-type-guard – Alex

答えて