私は、Typescriptでインタフェースを使用して、基本クラスを拡張するいくつかのクラスでのみ使用できる関数を定義しています。そうmoveAnimal機能が大きくなりすぎますTypeScript - クラスがインタフェースを実装しているかどうかを確認します。
class Animal {
}
interface IWalkingAnimal {
walk(): void;
}
class Dog extends Animal implements IWalkingAnimal {
}
class Cat extends Animal implements IWalkingAnimal {
}
class Snake extends Animal {
}
private moveAnimal(animal: Animal) {
if (animal instanceof Cat || animal instanceof Dog) {
animal.walk();
}
}
さて、トラブルが、私が追加されますされ、より「歩く」動物が管理可能にする:これは私がこれまで持っているコードの簡易版です。 「道具」のチェックが機能しない、と私はインターフェイスを使用したときに「instanceofは」に相当するものを見つけることができませんしかし
private moveAnimal(animal: Animal) {
if (animal implements IWalkingAnimal) {
animal.walk();
}
}
:私は何をしたいのは、このようなものです。 Javaでは、 'instanceof'の使用はここではうまくいくようですが、TypeScriptはこれを許可しません。
このようなことがTypeScriptに存在するのでしょうか、それとももっと良いアプローチがありますか?私はTypeScript 1.8.9を使用しています。
「IWalkingAnimal」は、インターフェイスではなく、Animalのサブクラスではありません。そうすれば、問題は起こらず、意味をなさないでしょう。 – iberbeu
@iberbeuこれは、この単純化された例ではうまくいくでしょう。柔軟性のためにIWalkingAnimalをインターフェイスにして、Animalに厳密に束縛されていないようにします。下のThiloの答えはそのトリックを行うべきです。 – MarkLunney
[Interface type check with Typescript]の可能な複製(https://stackoverflow.com/questions/14425568/interface-type-check-with-typescript) –