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