MST
星途 面试题库

面试题:TypeScript接口组合与类型保护的应用

有两个接口`Flyable`(包含`fly`方法)和`Swimmable`(包含`swim`方法)。创建一个`Animal`接口,它可以是`Flyable`或`Swimmable`其中之一的组合。编写一个函数`performAction`,根据传入的`Animal`对象的实际类型,调用相应的`fly`或`swim`方法。请详细说明如何通过类型保护来实现这个功能,并给出完整代码。
32.9万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

以下是使用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); 

在上述代码中:

  1. 首先定义了 FlyableSwimmable 两个接口,分别包含 flyswim 方法。
  2. 接着定义 Animal 接口,它是 FlyableSwimmable 的组合。
  3. performAction 函数通过类型保护 'fly' in animal'swim' in animal 来判断 animal 对象实际具有的方法,从而调用相应的 flyswim 方法。
  4. 最后创建了 BirdFish 类分别实现 FlyableSwimmable 接口,并在示例用法中调用 performAction 函数进行测试。