1. ホーム
  2. typescript

[解決済み] TypeScriptのクラス型チェック

2022-03-15 17:07:46

質問

ActionScriptでは、実行時に型式を確認するために は演算子 :

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

TypeScriptで変数(extends or)が特定のクラスやインターフェイスであるかどうかを検出することは可能でしょうか?

言語仕様の中にそれに関する記述が見つかりませんでした。クラスやインターフェイスを扱うときにはあるはずなのですが。

どのように解決するのですか?

<ブロッククオート

4.19.4 instanceof演算子

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

つまり、次のように使うことができます。

mySprite instanceof Sprite;

この演算子はActionScriptにもありますが、もうそちらでは使わない方がいいことに注意してください。

<ブロッククオート

is 演算子は ActionScript 3.0 の新機能で、変数や式が与えられたデータ型のメンバであるかどうかをテストすることができます。以前のバージョンの ActionScript では、instanceof 演算子がこの機能を提供していましたが、ActionScript 3.0 では、データ型のメンバシップをテストするために instanceof 演算子を使用するべきではありません。なぜなら、x instanceof y という式は単に x のプロトタイプチェーンに y が存在するかどうかをチェックするだけだからです(そして ActionScript 3.0 ではプロトタイプチェーンは継承階層の全体像を提供しない)。

TypeScriptの instanceof は同じ問題を共有しています。まだ開発途中の言語なので、そのような機能を提案することをお勧めします。

こちらもご覧ください。