instanceof
を使用して、オブジェクトが特定のタイプであるかどうかを確認しています。 これが本当であれば、そのオブジェクトをそのまま使用するには、そのオブジェクトをその特定の型にキャストする必要があると思います。instanceofを使用している場合は、typescriptにキャストは不要ですか?
代わりに、IF文の中で、キャストは必要ないようです。少なくともVisual StudioコードとTypescript Playgroundではありません。
class Drink {
price: number = 4;
}
class Beer extends Drink {
alcohol: number = 6;
}
let array: Array<Drink> = new Array<Drink>();
array.push(new Drink(), new Beer(), new Drink());
for (let g of array) {
// here, only 'price' is available as a property of drink
console.log(g.price);
if (g instanceof Beer) {
// but unexpectedly, inside the IF statement
// the alcohol value IS available!
console.log(g.alcohol);
// I expected I needed to cast drink to beer first:
console.log((<Beer>g).alcohol);
}
}
これはTypescriptエディタの非常にスマートな動作か、これは不具合ですか?
コピー>この動作を確認するためにTypescript Playgroundに上記のコードを貼り付け...
キャストのようなものはタイプスクリプトではありません。値はコンパイル時の型であると主張できますが、partのインスタンスはすでにコンパイラーがそれを宣言するほどスマートですから;) – toskv