361

ActionScript では、is 演算子を使用して実行時に型を確認できます。

var mySprite:Sprite = new Sprite(); 
trace(mySprite is Sprite); // true 
trace(mySprite is DisplayObject);// true 
trace(mySprite is IEventDispatcher); // true

変数(拡張または)が特定のクラスまたはTypeScriptのインターフェースであるかどうかを検出することは可能ですか?

言語仕様でそれについて何も見つけることができませんでした。クラス/インターフェースを操作するときにそこにあるはずです。

4

3 に答える 3

474

4.19.4 instanceof 演算子

このinstanceof演算子では、左側のオペランドが Any 型、オブジェクト型、または型パラメーター型である必要があり、右側のオペランドが Any 型または 'Function' インターフェイス型のサブタイプである必要があります。結果は常に Boolean プリミティブ型になります。

だからあなたは使うことができます

mySprite instanceof Sprite;

この演算子は ActionScript にもありますが、そこでは使用しないでください。

ActionScript 3.0 の新機能である is 演算子を使用すると、変数または式が特定のデータ型のメンバーであるかどうかをテストできます。以前のバージョンの ActionScript では、instanceof 演算子がこの機能を提供していましたが、ActionScript 3.0 では、データ型のメンバーシップをテストするために instanceof 演算子を使用しないでください。式 x instanceof y は単に x のプロトタイプ チェーンに y が存在するかどうかをチェックするだけなので、手動の型チェックには instanceof 演算子の代わりに is 演算子を使用する必要があります (ActionScript 3.0 では、プロトタイプ チェーンは、継承階層)。

TypeScriptinstanceofも同じ問題を共有しています。まだ発展途上の言語なので、そのような機能の提案を述べることをお勧めします。

以下も参照してください。

于 2012-10-08T20:54:10.410 に答える
89

TypeScript には、実行時に変数の型を検証する方法があります。型 predicateを返す検証関数を追加できます。そのため、if ステートメント内でこの関数を呼び出すことができ、そのブロック内のすべてのコードが、想定している型として安全に使用できることを確認してください。

TypeScript ドキュメントの例:

function isFish(pet: Fish | Bird): pet is Fish {
   return (<Fish>pet).swim !== undefined;
}

// Both calls to 'swim' and 'fly' are now okay.
if (isFish(pet)) {
  pet.swim();
}
else {
  pet.fly();
}

詳細については、 https ://www.typescriptlang.org/docs/handbook/advanced-types.html を参照してください。

于 2016-11-21T10:42:39.203 に答える