Я использую интерфейс в 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();
}
}
Теперь проблема заключается в том, что я добавлю больше "ходячих" животных, поэтому функция moveAnimal будет слишком большой, чтобы быть управляемой. Я хотел бы сделать следующее:
private moveAnimal(animal: Animal) {
if (animal implements IWalkingAnimal ) {
animal.walk();
}
}
Однако проверка "реализует" не работает, и я не могу найти эквивалент "instanceof" при использовании интерфейсов. В Java кажется, что использование 'instanceof' будет работать здесь, но Typescript не позволит этого.
Существует ли такая вещь в TypeScript, или здесь есть лучший подход? Я использую Typescript 1.8.9.