发布于2026-07-23 阅读(0)
扫一扫,手机访问
交叉类型,简单来说,就是把多个类型合并成一个类型。它允许我们将现有的多种类型叠加到一起,最终形成一种新的类型,这个新类型自然就包含了所有原始类型的特性。听起来是不是有点像“类型界的混搭”?
我们通常用 type 关键字来声明一个交叉类型。举个例子:
interface A { a: number }
interface B { b: string }
type C = A & B // C 同时拥有 A 和 B 的所有属性
在这个例子里,C 就是 A 和 B 的交叉类型,它必须同时满足 a 和 b 两个属性。换句话说,当你使用 C 类型的变量时,得同时提供 number 类型的 a 和 string 类型的 b——少一个都不行。
1. 并不是所有类型都适合做交叉。比如 string & number 这种原子类型的交叉,其实没有任何意义——因为不存在一个值既是字符串又是数字。这就像要求一个物体同时是苹果和橙子,现实中没有这种东西。
2. 当两个接口类型做交叉,且它们包含相同的属性名时,情况就变得微妙了。如果这两个属性的类型相同,那么合并后属性类型不变;但如果类型不同,整个交叉类型会变成 never。看代码:
interface A { a: number }
interface B { a: string }
type C = A & B // C 是 never 类型
为什么会这样?因为 a 属性既要同时是 number 又是 string,这根本不可能实现,所以 TypeScript 直接给它判了“死刑”——返回 never。
3. 要特别注意交叉类型和联合类型的区别:交叉类型是“既是也是”,而联合类型是“或者是”。前者要求所有条件同时满足,后者只要求满足其中之一。这两者在实际开发中经常被混淆,但一旦搞懂,就能避免很多类型上的坑。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8