交叉类型:A 与 B
使用 & 合并类型及其属性
交叉类型:A 与 B 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 4 节课。
欢迎
交叉类型会将多个类型组合成一个类型。交叉类型的值必须同时满足所有组合类型的要求。
基本交叉类型语法
使用 `&` 运算符创建交叉类型。结果包含两种类型的全部属性。
type Named = { name: string };
type Aged = { age: number };
type Person = Named & Aged;
const alice: Person = { name: 'Alice', age: 30 };所有属性都是必需的
交叉类型要求所有组合类型中的全部属性。缺少任何属性都会导致类型错误。
type A = { x: number };
type B = { y: number };
type AB = A & B;
// const p: AB = { x: 1 }; // Error — missing y合并对象类型
交叉类型通常用于合并两个互不扩展的对象类型。
type Serializable = { serialize(): string };
type Loggable = { log(): void };
type Service = Serializable & Loggable;交叉类型与扩展的比较
对于对象类型,接口扩展和交叉类型会产生相似结果,但交叉类型可以处理包含联合类型和原始类型在内的类型别名。
// Interface extend:
interface C extends A, B {}
// Intersection type:
type D = A & B;
// Both give the same shape for simple objects包含冲突类型的交叉类型
如果两个交叉类型具有相同属性但类型冲突,该属性的结果就是 `never`。
type X = { id: string };
type Y = { id: number };
type XY = X & Y;
// XY.id is string & number = never — impossible!函数参数中的交叉类型
使用交叉类型,让函数接受必须满足多个接口契约的参数。
function process(item: Serializable & Loggable): void {
item.log();
console.log(item.serialize());
}使用交叉类型实现混入模式
交叉类型支持混入模式,即组合来自多个来源的行为。
type Timestamped<T> = T & { createdAt: Date };
type User = Timestamped<{ name: string; email: string }>;原始类型的交叉类型会归并为 never
无法重叠的原始类型进行交叉后,会归并为 `never`。
type T = string & number; // never — a value can't be both交叉类型与联合类型:核心区别
联合类型(|)表示 OR,即值可以是这些类型中的任意一个。交叉类型(&)表示 AND,即值必须满足所有这些类型。
将交叉类型与泛型结合使用
使用交叉类型将泛型类型与其他属性组合起来,从而创建灵活且可扩展的类型。
type WithId<T> = T & { id: number };
const user: WithId<{ name: string }> = { id: 1, name: 'Alice' };快速检查
`type T = string & number` 的结果是什么?
回顾
交叉类型(&)要求所有组合类型中的全部属性。您可以使用它们合并对象结构、实现混入,以及组合泛型类型。冲突的原始类型交叉后会归并为 never。
常见问题解答
「交叉类型:A 与 B」课时是免费的吗?
是的 — 「交叉类型:A 与 B」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。
「交叉类型:A 与 B」这节课中我会学到什么?
使用 & 合并类型及其属性 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 TypeScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「交叉类型:A 与 B」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 TypeScript Academy 课中编写并运行代码吗?
能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 联合类型:A 或 B
- 交叉类型:A 与 B
- 使用可辨识联合安全地进行模式匹配
- 联合类型与交叉类型的实用模式