MST

星途 面试题库

面试题:TypeScript接口的继承与交叉类型应用

定义一个基础接口`Animal`,包含`name`属性(字符串类型)和`move`方法(该方法接受一个数字参数,表示移动的距离,并返回字符串描述移动情况)。再定义一个`Dog`接口继承自`Animal`,并新增`bark`方法(无参数,返回字符串`'Woof!'`)。另外,定义一个交叉类型`PetDog`,它是`Dog`接口与一个包含`owner`属性(字符串类型)的接口的交叉。最后创建一个函数`describePetDog`,接受一个`PetDog`类型的参数,调用其方法并打印出相关信息。请写出完整代码,并解释接口继承和交叉类型在这个场景中的作用。
25.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 定义基础接口Animal
interface Animal {
    name: string;
    move(distance: number): string;
}

// 定义Dog接口继承自Animal,并新增bark方法
interface Dog extends Animal {
    bark(): string;
}

// 定义交叉类型PetDog
type PetDog = Dog & {
    owner: string;
}

// 创建describePetDog函数
function describePetDog(pet: PetDog) {
    console.log(`Name: ${pet.name}`);
    console.log(`Owner: ${pet.owner}`);
    console.log(`Move: ${pet.move(10)}`);
    console.log(`Bark: ${pet.bark()}`);
}

// 示例用法
const myPetDog: PetDog = {
    name: 'Buddy',
    owner: 'John',
    move(distance) {
        return `Moved ${distance} meters`;
    },
    bark() {
        return 'Woof!';
    }
};

describePetDog(myPetDog);

接口继承和交叉类型的作用解释

  1. 接口继承:在上述代码中,Dog接口继承自Animal接口。接口继承的作用在于复用代码和建立类型层次结构。Dog接口不仅拥有Animal接口的所有属性和方法(name属性和move方法),还可以在此基础上添加特有的方法(bark方法)。这样可以避免在Dog接口中重复定义Animal接口已有的内容,提高代码的可维护性和复用性。
  2. 交叉类型PetDog是一个交叉类型,它是Dog接口与包含owner属性的接口的交叉。交叉类型的作用是将多个类型合并为一个类型,新类型具有所有参与交叉的类型的特性。在这个场景中,PetDog类型既有Dog接口的namemovebark等属性和方法,又有owner属性,通过交叉类型可以灵活地组合不同类型的特征,以满足特定需求。