2016-04-29 9 views

答えて

3

User-defined type guardsinstanceof type guardsanyunionintersectionタイプを含む)anyある狭いないタイプを行います。型ガードでanyを狭くなります

唯一のことは、typeofチェックを使用して、プリミティブstringboolをチェックし、numberさ:

var something: any; 
if (typeof something === "string") 
{ 
    something.NonExistant(); // <- Error, does not exist on `string` 
    something.substr(0, 10); // <- Ok 
} 

他の一般的なtypeof演算値を、functionobjectundefinedは、上記の例のように使用しようとするとanyを絞り込みません。

open issueは、anyを、TS 2.0でマイルストーン化されたユーザ定義型ガード内のプリミティブに絞り込むことを可能にします。

これは、主な動機は、そのタイプ-ガードタイプが一般的に可能なタイプを狭めていると私たちは確信することができる複数のプロパティへのアクセスを取得しているように思わ意識しdesign decisionないバグ

ですチェックされたコンテキスト内に存在します。しかし、タイプanyをガードする場合は、すでに存在する可能性があるすべてのメンバーにアクセスできるので、実際にはあなたの例で期待したようにanyのタイプガードを行うと実際に制限されます。

もう1つの動機は、が他のタイプと同じように狭くなった場合には、too much crappy codeが存在しているようです。

回避策

あなたは、任意のクラスのインスタンスであることができ、変数を持っている場合は、予想通り、代わりにanyの種類Objectとタイプのガードを使用し動作します。

関連する問題