どうしたの
問題は、instanceofJavaScriptからの構成であり、JavaScriptでは、右側のオペランドの値をinstanceof予期していることです。具体的には、x instanceof FooJavaScriptでランタイムチェックを実行Foo.prototypeして、のプロトタイプチェーンのどこかに存在するかどうかを確認しますx。
ただし、TypeScriptでは、interfacesにはemitがありません。つまり、実行時にFooもFoo.prototype存在もしないため、このコードは間違いなく失敗します。
TypeScriptは、これが機能しないことを伝えようとしています。Foo単なるタイプであり、値ではありません。
「代わりに何ができinstanceofますか?」
タイプガードとユーザー定義のタイプガードを調べることができます。
「しかし、私がちょうどからに切り替えた場合interface はclassどうなりますか?」
あなたはからスイッチに誘惑されるかもしれないinterfaceしclass、しかし、あなたは(物事が主にされている活字体の構造型のシステムであることを認識すべきベース形状)、指定したクラスと同じ形状をしている任意のオブジェクトを生成することができます:
class C {
a: number = 10;
b: boolean = true;
c: string = "hello";
}
let x = new C()
let y = {
a: 10, b: true, c: "hello",
}
x = y;
y = x;
この場合は、あなたが持っているxとy同じ型を持つことができますが、使用してみた場合にinstanceofいずれか一方に、あなたは他の反対の結果を得るでしょう。したがって、TypeScriptで構造型を利用している場合は、型についてあまり説明しinstanceofません。
Foo | string。