User-defined type guardsとinstanceof
type guards(any
とunionとintersectionタイプを含む)any
ある狭いないタイプを行います。型ガードでany
を狭くなります
唯一のことは、typeof
チェックを使用して、プリミティブstring
、bool
をチェックし、number
さ:
var something: any;
if (typeof something === "string")
{
something.NonExistant(); // <- Error, does not exist on `string`
something.substr(0, 10); // <- Ok
}
他の一般的なtypeof演算値を、function
、object
とundefined
は、上記の例のように使用しようとするとany
を絞り込みません。
open issueは、any
を、TS 2.0でマイルストーン化されたユーザ定義型ガード内のプリミティブに絞り込むことを可能にします。
これは、主な動機は、そのタイプ-ガードタイプが一般的に可能なタイプを狭めていると私たちは確信することができる複数のプロパティへのアクセスを取得しているように思わ意識しdesign decisionないバグ
ですチェックされたコンテキスト内に存在します。しかし、タイプany
をガードする場合は、すでに存在する可能性があるすべてのメンバーにアクセスできるので、実際にはあなたの例で期待したようにany
のタイプガードを行うと実際に制限されます。
もう1つの動機は、が他のタイプと同じように狭くなった場合には、too much crappy codeが存在しているようです。
回避策
あなたは、任意のクラスのインスタンスであることができ、変数を持っている場合は、予想通り、代わりにany
の種類Object
とタイプのガードを使用し動作します。