TypeScript的intersection类型
什么是 TypeScript 的交叉类型(Intersection Types)?
TypeScript 的交叉类型(Intersection Types)是通过 & 运算符将多个已有类型组合成一个新类型。新类型会同时拥有所有被组合类型的属性和特性。这样可以灵活地构建更复杂的数据结构。
交叉类型和联合类型有什么区别?
交叉类型(Intersection Types,&):新类型必须同时满足所有被组合类型的要求,拥有所有属性。
联合类型(Union Types,|):变量可以是多种类型中的任意一种,只需满足其中一个类型的要求。
如何定义和使用交叉类型?
定义交叉类型的语法如下:
type typeAB = typeA & typeB;
例如,结合 Identity 和 Contact 两个接口,组成一个新的类型
Employee:interface Identity {
id: number;
name: string;
}
interface Contact {
email: string;
phone: string;
}
// 结合上述两个接口的类型
type Employee = Identity & Contact;
// 拥有上述两个接口的所有属性
let e: Employee = {
id: 100,
name: 'John Doe',
email: 'john.doe@example.com',
phone: '(408)-897-5684'
};
如果多个接口有同名属性,交叉类型会如何处理?
如果多个接口有同名属性且类型一致,则可以正常合并。如果同名属性类型不一致,TypeScript 会报错,无法创建该交叉类型。
交叉类型的顺序是否影响最终类型的结构?
交叉类型的顺序不影响最终类型的结构。例如:
type typeAB = typeA & typeB;
type typeBA = typeB & typeA;
typeAB 和 typeBA 拥有相同的属性。
如何通过交叉类型组合多个接口,构建更复杂的类型?
可以将多个接口通过 & 运算符组合。例如:
interface BusinessPartner {
name: string;
credit: number;
}
// 结合多个类型
type Employee = Identity & BusinessPartner & Contact;
// 拥有上述三个接口的所有属性,而且同名属性 name 还进行了合并
let e: Employee = {
id: 100,
name: 'John Doe',
email: 'john.doe@example.com',
phone: '(408)-897-5684',
credit: 1000
};
这样,Employee 类型就同时拥有 Identity、BusinessPartner 和 Contact 的所有属性。
-
如果你觉得我的工作对你有帮助,可以通过分享和推荐这篇文字或者关注同名公众号来支持我,你的支持是我持续创作的最大动力:
![image]()
-
转载以及引用请注明原文链接。
-
本博客所有文章除特别声明外,均采用CC 署名-非商业使用-相同方式共享 许可协议。

TypeScript 的交叉类型如何定义,以及如何使用?

浙公网安备 33010602011771号