我正在使用Typescript中的接口来定义仅在某些扩展基类的类上可用的函数。这是代码的简化版本,我到目前为止有: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。
你为什么不把'IWalkingAnimal'作为动物的一个子类而不是界面?这样你就不会有问题,这是有道理的 – iberbeu
@iberbeu这将适用于这个简化的例子,为了灵活性,我想IWalkingAnimal成为一个界面,所以它不是严格依赖于动物。 Thilo的答案应该可以解决问题。 – MarkLunney
[使用Typescript检查接口类型]可能的重复(https://stackoverflow.com/questions/14425568/interface-type-check-with-typescript) –