この質問は、 TypeScript を使用したクラス型チェックに直接類似しています
タイプ any の変数がインターフェイスを実装しているかどうかを実行時に確認する必要があります。これが私のコードです:
interface A{
member:string;
}
var a:any={member:"foobar"};
if(a instanceof A) alert(a.member);
このコードを typescript プレイグラウンドに入力すると、最後の行に「名前 A は現在のスコープに存在しません」というエラーとしてマークされます。名前は現在のスコープに存在します。var a:A={member:"foobar"};
エディターからの苦情なしで変数宣言を変更することもできます。Web を閲覧して SO に関する他の質問を見つけた後、インターフェイスをクラスに変更しましたが、オブジェクト リテラルを使用してインスタンスを作成することはできません。
タイプ A がどのように消えてしまうのか疑問に思いましたが、生成された JavaScript を見ると問題が説明されています。
var a = {
member: "foobar"
};
if(a instanceof A) {
alert(a.member);
}
A はインターフェイスとして表現されないため、実行時の型チェックはできません。
動的言語としての JavaScript にはインターフェイスの概念がないことを理解しています。インターフェイスのタイプチェックを行う方法はありますか?
typescript プレイグラウンドのオートコンプリートは、typescript がメソッドを提供することさえ明らかにしますimplements
。どのように使用できますか?