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 署名-非商业使用-相同方式共享 许可协议。

posted @ 2025-06-17 23:53  Asanwos  阅读(46)  评论(0)    收藏  举报