であれば、私はいくつかのtypescriptですインタフェース、抽象クラスとサブクラスを実装しましたサブクラスのメソッドを許可していません。ボックスにはAnimal
のようなものがあります。この例では、Snake
またはOwl
です。活字体は、変数がスーパータイプ
Box
をOwl
で内部に作成できます。
let box = new Box(new Owl());
そして今問題 - スーパークラスで宣言された任意の方法を用いて、完全に罰金です:
box.animal.sound(); // this is fine
いますが、フクロウを見ることができるように、追加の機能fly()
を持っているとハエがAnimal
に宣言されていないのでスロー:
box.animal.fly(); // Property 'fly' does not exist on type 'Animal'.
通常の変数を作成する場合も同様です。
let animal:Animal;
animal = new Owl();
animal.fly();
さらに、アニマルクラスは抽象クラスでなくてもよく、通常のクラスまたはインターフェイスでもかまいません。結果は同じになります。
私の質問はです:私のクラスが他のクラスのスーパーセットである場合、なぜtypescriptがそれをスローしますか?私は、この例では、オブジェクトがeat()
またはsound()
のようないくつかのプロパティを持つことをインターフェイスと型付けの主な考え方で保証していると思います。
私は何かが間違っている可能性がありますので、何らかの変数がいくつかの型になっている必要がありますが、サブクラスで追加のメソッドを使用できるようになりました。
を使用してオフ最高ですあなたは正しく – Dummy