どうしたの
問題は、instanceof
JavaScriptからの構成であり、JavaScriptでは、右側のオペランドの値をinstanceof
予期していることです。具体的には、x instanceof Foo
JavaScriptでランタイムチェックを実行Foo.prototype
して、のプロトタイプチェーンのどこかに存在するかどうかを確認しますx
。
ただし、TypeScriptでは、interface
sには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
。