首页/新闻资讯/正文详情

The Concise TypeScript Book 精讲:Intersection Types(交叉类型)——用 `` 将多个类型组合为一个类型

发布时间:2026/9/24 17:22:27 来源:云帆数科 栏目:资讯中心
The Concise TypeScript Book 精讲:Intersection Types(交叉类型)——用 `` 将多个类型组合为一个类型
The Concise TypeScript Book 精讲Intersection Types交叉类型——用将多个类型组合为一个类型【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址: https://gitcode.com/gh_mirrors/typ/typescript-book交叉类型Intersection Type是 TypeScript 类型系统中用于组合的核心工具它代表一个同时拥有两个或更多类型全部属性的值语法上使用符号连接各类型。本指南以开源项目 The Concise TypeScript Book 中 intersection-types.md阿拉伯语版及 英文原版 为主体结合仓库内 union-type.md、extending-types.md、differences-between-type-and-interface.md 等关联章节从基础语法到实战组合技巧、再到与联合类型和接口继承的取舍帮你一次吃透交叉类型。什么是交叉类型交叉类型描述的是同时满足多个类型约束的值。原文档给出的定义是交叉类型是一个代表拥有两个或更多类型所有属性的值的类型各类型之间用符号连接。原文档的完整示例type X { a: string; }; type Y { b: string; }; type J X Y; // Intersection const j: J { a: a, b: b, };可以看到J X Y之后j必须同时提供a和b两个属性缺一不可。这正是交叉类型的语义它做的是属性集合的并集——类型X Y的成员必须满足X的全部约束也满足Y的全部约束。在本书的目录结构中交叉类型位于 table-of-contents.md 第 33 节紧跟在 Union Type联合类型第 32 节之后、Type Indexing类型索引第 34 节之前是类型操作Type Manipulation主题下的基础构成之一。交叉类型与联合类型与|的本质区别要理解交叉类型最好的对照物就是它的姊妹——联合类型。本书 union-type.md 对联合类型的定义是联合类型代表一个值可以是若干类型中的某一种用|符号连接let x: string | number; x hello; // Valid x 123; // Valid两者的语义恰好相反运算符语义值必须满足的条件A \| B联合值要么是 A要么是 B满足其中任意一个即可A B交叉值同时是 A 和 B满足全部类型的约束对于对象类型联合类型取属性的交集能安全访问的只有两边共有的属性而交叉类型取属性的并集拥有两边所有属性。这一点在 differences-between-type-and-interface.md 中被明确点出类型别名在定义联合与交叉类型时比接口更灵活——用type关键字可以轻松通过|创建联合类型、通过创建交叉类型而接口没有内置的交叉类型支持只能间接表达联合类型。用交叉类型组合对象类型交叉类型最常见的实战场景是把多个对象类型拼接成一个完整类型例如本书 differences-between-type-and-interface.md 中的人员信息示例type Department dep-x | dep-y; // Union type Person { name: string; age: number; }; type Employee { id: number; department: Department; }; type EmployeeInfo Person Employee; // Intersection这里EmployeeInfo同时具备Person的name、age与Employee的id、department非常适合描述继承关系或角色叠加的数据结构例如员工同时是人、管理员同时是用户等模型。交叉类型同样可以与接口配合使用。由于接口本身也是类型它们可以直接参与交叉interface A { x: string; y: number; } type B A { j: string; }; const c: B { x: x, y: 123, j: j, };这也是本书 differences-between-type-and-interface.md 给出的示例——type关键字可以用把接口A与匿名对象类型组合成新类型B实现在已有接口基础上追加属性的效果。交叉类型与接口继承extends的取舍提到组合类型很多人会想到接口的extends继承。本书 extending-types.md 专门厘清了两者的边界接口可以通过extends复制其他类型的成员interface X { a: string; } interface Y extends X { b: string; }接口还可以同时继承多个类型interface A { a: string; } interface B { b: string; } interface Y extends A, B { y: string; }但关键在于extends关键字只作用于接口和类对于type类型别名组合方式就是交叉类型type A { a: number; }; type B { b: number; }; type C A B;同时继承方向是单向的可以用接口继承extends一个type声明的对象类型但不能反过来用类型别名extends接口类型别名没有extends关键字type A { a: string; }; interface B extends A { b: string; }由此可以总结出两条实用准则需要声明合并declaration merging或面向对象风格时优先用接口的extends详见 differences-between-type-and-interface.md 对声明合并的讲解需要把联合类型、交叉类型、泛型等复杂结构组合起来时用type因为接口无法extends一个像联合类型这样的复杂类型。交叉类型在类型操作体系中的位置本书 type-manipulation.md 指出可以通过组合、操作或转换已有类型来创建新类型而交叉类型正是组合这一路线的核心操作符type A { foo: number }; type B { bar: string }; type C A B; // Intersection of A and B const obj: C { foo: 42, bar: hello };它与其他类型操作手段如基于keyof的 Mapped Types映射类型、索引签名等并不冲突而是互补交叉负责横向合并多个来源映射负责按规则批量改写属性。此外交叉类型与 Object Types对象类型 章节强调的对象类型描述对象形状的能力一脉相承——交叉后的结果仍然是一个符合形状约束的对象类型可以继续被索引、被映射、被泛型约束使用。使用交叉类型时的注意事项在享受的组合便利时有几个边界情况需要心中有数同名属性的冲突当两个被交叉的类型包含同名但类型不兼容的属性时TypeScript 会试图将两者合并结果往往收敛为never不可能的类型。例如{ a: string } { a: number }的a属性类型会变成string number也就是never——没有任何值能同时是string又是number。因此在实际建模时应避免交叉出相互矛盾的同名属性。交叉不等于运行时合并交叉类型只在类型层面生效它不会在运行时深拷贝或合并两个对象。赋值时仍需自己构造出同时满足全部约束的对象字面量。优先用接口表达继承语义如果只是简单的单层继承interface Y extends X在可读性和可扩展性支持声明合并上通常优于type Y X {}交叉类型的优势在于处理多源组合、复杂类型与泛型场景。小结交叉类型A B是 TypeScript 类型组合的基础设施它表示同时拥有 A 与 B 全部属性的值与表示要么 A 要么 B的联合类型A | B形成互补它与接口的extends各有适用边界——接口继承面向类和声明合并交叉类型则能自由组合包括对象类型、接口乃至复杂泛型在内的任意类型。掌握就等于掌握了在类型层面拼装领域模型的核心能力。想继续深入可在仓库中对照阅读 intersection-types.md 英文版、union-type.md、extending-types.md 与 differences-between-type-and-interface.md这些章节共同构成了本书类型系统部分的完整脉络。【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址: https://gitcode.com/gh_mirrors/typ/typescript-book创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

shadcn-vue RangeCalendar 组件完整指南:日期区间选择日历的安装、用法与源码剖析
shadcn-vue RangeCalendar 组件完整指南:日期区间选择日历的安装、用法与源码剖析

UI组件前端 【免费下载链接】shadcn-vue Vue port of shadcn-ui 项目地址: https://gitcode.com/gh_mirrors/sh/shadcn-vue 点击查看 免费下载 本文以 Range Calendar 官方文档 为核心,系统讲解 shadcn-vue 中 RangeCalendar 日期区间选择组件的功能定位… · 2026/9/24 17:22:20

Principle 键盘快捷键速查指南:macOS 交互原型设计工具的 30 个高频快捷键
Principle 键盘快捷键速查指南:macOS 交互原型设计工具的 30 个高频快捷键

文档教程知识库 【免费下载链接】reference ⭕ Share quick reference cheat sheet for developers. 项目地址: https://gitcode.com/gh_mirrors/re/reference 点击查看 免费下载 本指南以仓库速查表 source/_posts/principle.md 为核心,完整梳理 Princ… · 2026/9/24 17:22:20

Keystone Query API 完全指南:用 `context.query` 以编程方式执行 GraphQL CRUD 操作
Keystone Query API 完全指南:用 `context.query` 以编程方式执行 GraphQL CRUD 操作

Keystone Query API 完全指南:用 context.query 以编程方式执行 GraphQL CRUD 操作 【免费下载链接】keystone The superpowered headless CMS for Node.js — built with GraphQL and React 项目地址: https://gitcode.com/gh_mirrors/key/keystone 导读 K… · 2026/9/24 17:22:20

边缘AI应用:事关家庭隐私,家用AI摄像头的哪些AI任务在本地完成
边缘AI应用:事关家庭隐私,家用AI摄像头的哪些AI任务在本地完成

家用AI摄像头的隐私风险不在于有没有AI,而是要弄清楚AI推理发生在哪里——是在摄像头本地芯片上完成,还是把视频传到云端处理。而本地推理的任务之所以安全,是因为摄像头拍到的原始视频没有离开设备,你的摄像头安装在家里&#xf… · 2026/9/24 17:53:30

第六篇:《Codex 桌面应用实战:多智能体并行协作》
第六篇:《Codex 桌面应用实战:多智能体并行协作》

如果说 Codex CLI 是“一个智能体在终端里干活”,那么 Codex 桌面应用就是“一个指挥中心,同时调度多个智能体并行工作”。2026 年 2 月,OpenAI 推出了 Codex macOS 桌面应用,将其定位为 “代理指挥中心”(Command Cen… · 2026/9/24 17:53:23

第五篇:《Codex CLI 安装与快速上手:从零到第一个任务》
第五篇:《Codex CLI 安装与快速上手:从零到第一个任务》

Codex 的桌面应用提供了直观的图形界面,但如果你想在终端中直接委托任务,或者需要在 CI/CD 流水线中集成 AI 编码能力,Codex CLI 才是真正的起点。它是 OpenAI 官方开源的终端 AI 编程智能体,用 Rust 实现,能在你的项目… · 2026/9/24 17:53:23

开工才发现缺料,BOM、库存、采购怎么串起来?物料齐套系统选型
开工才发现缺料,BOM、库存、采购怎么串起来?物料齐套系统选型

制造业里最让人头疼的场面之一,就是工单已经下发了、工人已经到位了,开工才发现——缺料。A料库存不够,B料采购还没到,C料在仓库里但没人知道在哪。生产计划被迫中断,交期一拖再拖。 这个问题的根源,不是库… · 2026/9/24 17:52:58

设备不会说话:一天里的七层证据
设备不会说话:一天里的七层证据

设备不会说话:一天里的七层证据标签:有限状态机、互斥租约、生产者-消费者、内存池、构建指纹、软限位、图像显示链路、统计基线、git 语义 引言:设备不会说话。它不会告诉你"我现在很忙",也不会解释"刚才那次为什… · 2026/9/24 17:52:58

毕业设计说明书和毕业论文:图纸说明先落在谁那里,改一次要回头动几处
毕业设计说明书和毕业论文:图纸说明先落在谁那里,改一次要回头动几处

说明书与论文这两份文本的分工,不看你把哪段写进哪一本,而看这一处内容改一次要连带动几份。图纸说明大多两条船都踩:动一处就得回头核另一处。文末两项能力可以免费用起来:一项先把章节骨架整段搭起来,一项把图表公式… · 2026/9/24 17:52:58

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码