MST

星途 面试题库

面试题:TypeScript 静态类型系统下如何实现接口继承与类型保护

假设你正在开发一个前端项目,需要定义一个 `Animal` 接口,包含 `name` 和 `age` 属性。然后定义 `Dog` 和 `Cat` 接口继承自 `Animal` 接口,`Dog` 接口新增 `bark` 方法,`Cat` 接口新增 `meow` 方法。请编写代码实现上述接口定义,并通过类型保护在一个函数中根据传入对象的实际类型调用相应的方法。
45.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

在TypeScript中可以这样实现:

// 定义Animal接口
interface Animal {
    name: string;
    age: number;
}

// 定义Dog接口继承自Animal接口
interface Dog extends Animal {
    bark(): void;
}

// 定义Cat接口继承自Animal接口
interface Cat extends Animal {
    meow(): void;
}

// 定义函数,通过类型保护调用相应方法
function handleAnimal(animal: Dog | Cat) {
    if ('bark' in animal) {
        animal.bark();
    } else if ('meow' in animal) {
        animal.meow();
    }
}

// 示例Dog对象
const myDog: Dog = {
    name: 'Buddy',
    age: 3,
    bark() {
        console.log('Woof!');
    }
};

// 示例Cat对象
const myCat: Cat = {
    name: 'Whiskers',
    age: 2,
    meow() {
        console.log('Meow!');
    }
};

handleAnimal(myDog); 
handleAnimal(myCat); 

上述代码首先定义了Animal接口及其两个属性nameage,接着DogCat接口继承自Animal接口并分别添加了自己特有的方法barkmeowhandleAnimal函数通过类型保护判断传入对象是Dog还是Cat,从而调用相应的方法。最后创建了DogCat类型的对象并传入函数进行测试。