面试题答案
一键面试在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
接口及其两个属性name
和age
,接着Dog
和Cat
接口继承自Animal
接口并分别添加了自己特有的方法bark
和meow
。handleAnimal
函数通过类型保护判断传入对象是Dog
还是Cat
,从而调用相应的方法。最后创建了Dog
和Cat
类型的对象并传入函数进行测试。