- 定义接口和交叉类型:
interface Animal {
name: string;
age: number;
}
interface Flyable {
fly(): void;
}
interface Bird extends Animal, Flyable {}
interface Colorful {
color: string;
}
type BirdWithColor = Bird & Colorful;
- 创建符合交叉类型的实例:
const myBird: BirdWithColor = {
name: 'Sparrow',
age: 2,
fly() {
console.log('I can fly!');
},
color: 'brown'
};
- 交叉类型和接口继承在使用场景上的区别:
- 接口继承:
- 目的:用于建立类型之间的父子关系,子类(继承的接口)自动拥有父类(被继承的接口)的所有属性和方法。例如
Bird
接口继承Animal
接口,这样Bird
接口就有了name
和age
属性,同时还能实现Flyable
接口的fly
方法,这是一种很直观的类型扩展方式,用于描述具有明确层级关系的类型。
- 使用场景:适用于当你有一个通用的类型,并且有一些更具体的类型需要基于这个通用类型进行扩展时。比如在动物这个大体系下,
Bird
作为一种具体的动物类型,继承Animal
接口来获取动物共有的属性。
- 交叉类型:
- 目的:将多个类型合并为一个类型,新类型同时具备参与交叉的所有类型的属性和方法。例如
BirdWithColor
交叉类型,它结合了Bird
接口和Colorful
接口的特性,使得这个类型既有Bird
的属性和方法,又有color
属性。
- 使用场景:当你需要将多个独立的类型特征组合到一个对象上,而这些类型之间可能不存在明显的层级关系时使用。比如
Colorful
接口描述颜色特征,Bird
接口描述鸟类特征,它们本身并没有直接的继承关系,但通过交叉类型可以创建出既有鸟类特征又有颜色特征的新类型。