面试题答案
一键面试以下是使用TypeScript实现该功能的代码:
interface Flyable {
fly(): void;
}
interface Swimmable {
swim(): void;
}
interface Animal extends (Flyable | Swimmable) {}
function performAction(animal: Animal) {
if ('fly' in animal) {
animal.fly();
} else if ('swim' in animal) {
animal.swim();
}
}
// 示例用法
class Bird implements Flyable {
fly() {
console.log('I am flying');
}
}
class Fish implements Swimmable {
swim() {
console.log('I am swimming');
}
}
const bird = new Bird();
const fish = new Fish();
performAction(bird);
performAction(fish);
在上述代码中:
- 首先定义了
Flyable
和Swimmable
两个接口,分别包含fly
和swim
方法。 - 接着定义
Animal
接口,它是Flyable
或Swimmable
的组合。 performAction
函数通过类型保护'fly' in animal
和'swim' in animal
来判断animal
对象实际具有的方法,从而调用相应的fly
或swim
方法。- 最后创建了
Bird
和Fish
类分别实现Flyable
和Swimmable
接口,并在示例用法中调用performAction
函数进行测试。