[解決済み] TypeScriptの'instanceof'で「'Foo'は型を参照しているだけですが、ここでは値として使用されています」というエラーが出るのはなぜですか?
質問
次のコードを書きました。
interface Foo {
abcdef: number;
}
let x: Foo | string;
if (x instanceof Foo) {
// ...
}
しかし、TypeScriptではこのようなエラーが出てしまいました。
'Foo' only refers to a type, but is being used as a value here.
なぜ、このようなことが起こるのでしょうか?と思ったのは
instanceof
は、値が与えられた型を持つかどうかをチェックすることができるのだが、TypeScriptはこれを好まないようだ。
解決方法は?
instanceof
はインターフェースではなく、クラスで動作します。
何が起こっているのか
問題は
instanceof
はJavaScriptからの構成で、JavaScriptでは
instanceof
を期待します。
値
を右側のオペランドに指定します。
具体的には
x instanceof Foo
JavaScript は、実行時に
Foo.prototype
のプロトタイプチェーンのどこかに存在します。
x
.
しかし、TypeScriptでは
interface
にはemitがありません。つまり
Foo
または
Foo.prototype
が実行時に存在しないため、このコードは間違いなく失敗します。
TypeScriptは、この可能性を伝えようとしています。
決して
が動作します。
Foo
は単なる型であり、値ではありません。
の代わりに何ができますか?
instanceof
?quotです。
を調べることができます。 タイプガードとユーザー定義タイプガード .
しかし、もし私が
interface
から
class
?quotです。
を使用することができます。
interface
から
class
しかし、TypeScriptの構造的な型システム(ここでは主に
形状ベース
と同じ形状のオブジェクトを生成することができます。
class C {
a: number = 10;
b: boolean = true;
c: string = "hello";
}
let x = new C()
let y = {
a: 10, b: true, c: "hello",
}
// Works!
x = y;
y = x;
この場合、あなたは
x
と
y
を使ってみると、同じ型でありながら
instanceof
のどちらかを選択すると、もう片方では逆の結果が得られます。そこで
instanceof
にはなりません。
本当に
TypeScriptの構造型を利用する場合、型についてあまり多くを語らない。
関連
-
JavaScriptの関数この指摘の問題を説明
-
fetch ネットワークリクエストラッパーの説明例
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
JSアレイループと効率解析の比較
-
VUEグローバルフィルターの概念と留意点、基本的な使い方
-
Vueの「データを聴く」原則を解説
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] Typescript によるインターフェース型チェック
-
[解決済み] JSX.ElementとReactNodeとReactElementの使い分けは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン