《TypeScript高级编程》目录
这一页是全书的总入口。它不只把 33 节标题排成一张清单,还说明这本书写给谁、从哪一节切入最省力,以及每一节到底解决什么问题。如果你不确定从哪开始,先读「本书定位」与「读者画像与前置知识」,再对照「学习路径」选一条;如果你已经有明确目标,可以直接跳到「分部分章节」按编号定位。
全书结构是:正文 11 章 33 节 + 本篇目录,共 34 篇。正文按「从类型系统原理到工程落地」的推进顺序分为四个部分,每一部分解决一类问题。编号规则有两条:章内的节用「章.节」表示,例如 7.2 是第 7 章第 2 节;节内的子小节用「章.节.序」表示,例如 7.2.3 是第 7 章第 2 节的第 3 个子小节。
需要先说明的是本书的定位边界:它不重复讲语法,也不追求「覆盖 TypeScript 的全部特性」。像联合类型、可选链、async/await 这些日常写法,本书默认你已经会了;它把篇幅留给类型系统内部机制、编译器与语言服务、库作者与运行时这些「写得久才会遇到」的地方。
如何使用本目录
这一页有三种用法,取决于你此刻的状态。
如果你刚拿到这本书,按顺序读「本书定位」「读者画像与前置知识」「学习路径」三节,用十分钟决定自己的入口章节。不要跳过这一步:选错入口比读得慢更浪费时间。
如果你已经读到一半,想查某一节在哪,直接看「分部分章节」里对应部分的表格。每一行都有一句话说明,可以帮你确认是不是你要找的那一节,避免点进去再退出来的反复。
如果你把这本书当手册用,主要会用到每一节开头的编号子小节与末尾的「小结」;不少节末尾还有一段「与本书其它章节的衔接」,专门说明本节与相邻章节的关系,适合顺着线索跳读。
一句话总结这三种用法:第一次读用它选入口,读到中途用它定位,读完之后用它查阅。目录本身不产生知识,它只负责让你少走回头路。
本书定位
这是一本写给库作者、框架作者与工具链开发者的进阶书,而不是语法入门书。它假定你已经能熟练使用 TypeScript 写业务代码,准备把语言本身当成一件需要深入理解的工具来用——真实项目的麻烦通常不在「怎么写类型」,而在「类型系统到底怎么工作」「编译器与编辑器能怎么被扩展」「发布一个库要注意什么」。
它有三个刻意的取舍。第一,讲原理不停在类比:结构化兼容、类型擦除、实例化开销、V8 类型反馈,都会给出机制层面的解释,而不是「大概是这样」。第二,示例贴近真实场景:从写一个自定义 transformer 到发一个双包 ESM/CJS 的库,每一节的代码都尽量是能跑起来的最小片段。第三,不回避深水区:模块解析模式、条件导出、循环依赖、类型级图灵完备这些「语法书不讲但一旦踩到就绕不开」的内容,才是本书的主体。
如果你需要的是一份「TypeScript 语法速查」,这本书明显偏重;如果你已经写过几个能跑的库或工具,但总觉得类型系统像个黑盒、编译变慢不知道怎么查、发布时总担心破坏性变更,那它的节奏是合适的。
还有一点需要提前说明:本书不追求「把每个特性都列全」。像 satisfies、模板字面量类型这类偏语法的内容,本书只在用到时点到为止;反过来,像实例化深度上限怎么触发、条件导出在 bundler 下的优先级、类型擦除后对象在 V8 里的形态这些深入机制,本书会讲得比较细。这个取舍决定了它适合「已经在写库、想把语言用透」的人。
如果你还在学语法、想先建立完整的知识地图,建议先读入门卷;如果你已经能读懂主流库的 .d.ts,那本书的密度对你正好。
还有一个容易被忽略的定位问题:本书的很多内容只有在「你要交付给别人用」时才真正重要。一个只写业务代码、不发布库、不写工具的开发者,可能永远不需要关心 exports 映射或条件导出;但只要你开始写一个供别人 import 的包,第 7 章与第 9 章就会从「听起来很远」变成「今晚就要用」。本书按这个顺序组织,正是为了让这层「距离感」随着你的实际工作自然消失。
读者画像与前置知识
不同类型的读者,起点和建议路径差别很大。先在下面找到最接近自己的那一类。
刚学完语法的人:你会写类型、泛型与联合类型,但没想过它们在编译器内部是什么样子。建议按顺序从第 1 章读到第 11 章,不要跳章——第 1 章建立的「类型只是编译期结构」的直觉,是后面所有章节的地基。同时请确认三件事:能独立读懂一份 tsconfig.json、知道 strict 打开了哪些检查、能用泛型写出一个类型安全的容器。
这一类读者最常见的误区是「把书当文档读」——只读不敲。本书每一节都带可运行示例,请至少把第 1 章与第 5 章的示例完整跑通一遍;跑通一次比读三遍更能建立手感。
已有工程经验的人:这是本书最主要的读者群。建议快速扫过第 1 至第 3 章,把主要精力放在第 4 至第 9 章——元编程、编译器 API、语言服务、库作者与运行时,这些才是「类型能不能被用成工具」的分水岭。第 3 章的类型性能与第 10 章的数据边界不要跳,它们解释了很多「编译越来越慢」「类型写对了线上还是出错」的困惑。
如果你已经有明确的方向(比如就是要写编译器插件,或就是要发布一个 npm 包),可以把不相关的部分快速略过,只吸收其中与类型相关的机制;本书各章开头都写明了它解决什么问题,方便你判断取舍。
从其他生态转来的人(Java / C# / Rust / Go):你熟悉静态类型、泛型与编译期优化,可以跳过第 1 章的部分内容,直接从第 2 章读起,但要特别留意四处差异——结构化类型系统(看形状不看名字)、类型擦除(运行时没有类型信息)、类型级编程(类型系统本身可计算)、以及 Node 生态里「库只提供类型、不提供运行时校验」的默认习惯。第 7 章的声明文件与第 10 章的边界校验对你来说信息密度最高。
请特别留意本书对「运行时边界」的处理方式:在这门语言里,静态类型不会在运行时保护你,边界上的校验必须由你自己补上——这与多数静态类型语言的直觉相反,是转过来的人最容易踩的一处坑。
三类读者的共同建议只有一条:先跑通,再理解,最后才是记住。语言机制的特点是「用不到就会忘」,与其追求读完全书,不如保证每一节都留下一个能跑的例子。
学习路径
下表给出三条典型路径。三条路径不互斥,可以先速成再补齐。
| 路径 | 适合谁 | 读哪些 | 预计用时 |
|---|---|---|---|
| 完整通读 | 刚学完语法 / 想重建类型直觉 | 第 1 章至第 11 章顺序读,每节动手跑通示例 | 6–8 周(每天 1 小时) |
| 主线速读 | 已有工程经验、急于上手工具链 | 1.1、2.2、3.1、4.1、5.1、6.2、7.1、8.1、9.2、10.3、11.2 共 11 节 | 2–3 周 |
| 参考手册 | 已会用、需要随时查 | 按目录定位章节,优先用每节开头的编号子小节与「小结」 | 按需 |
两条补充建议:无论选哪条路径,都请完整跑通第 1 章与第 5 章的示例,先把「类型是编译期结构」与「AST 是可编程对象」这两个认知建立起来;如果时间允许,第 2 章的类型级编程与第 9 章的模块解析值得反复练习,它们是本书里最容易在真实项目中被反复查阅的两处内容。
需要提醒的是,「主线速读」给的是最快建立全局观的清单,不是「只读这些就够」。被略过的节往往不是不重要,而是可以等到你真的遇到对应问题时再回头补——这也正是「参考手册」这条路径存在的意义。
一份可执行的八周计划
上面三条路径偏原则。如果你希望有一份可以直接照着打勾的安排,下面这份八周计划可以作为起点(按每天投入一小时估算),它对应的是「完整通读」路径。
| 周次 | 主要任务 | 完成标志 |
|---|---|---|
| 第 1 周 | 第 1 章:类型系统原理 | 能解释一次 not assignable 报错到底卡在哪条规则上 |
| 第 2 周 | 第 2 章:类型级编程 | 能独立写出一个条件类型加递归的类型工具 |
| 第 3 周 | 第 3 章:类型性能治理 | 能用 --extendedDiagnostics 找到最慢的类型实例化 |
| 第 4 周 | 第 4 章:装饰器与元编程 | 能用装饰器与元数据写一个最小的 DI 容器 |
| 第 5 周 | 第 5 章:编译器 API | 能写一个 transformer,把源码里的某种模式改写掉 |
| 第 6 周 | 第 6 章:语言服务与编辑器 | 能跑通一个 tsserver 插件,或在项目里落地一次 codemod |
| 第 7 周 | 第 7–9 章:库作者、运行时与模块 | 能发布一个双包库,并解释它的模块解析过程 |
| 第 8 周 | 第 10–11 章:边界、生态与架构 | 能在项目边界加上校验,并写出一份类型规范 |
这份计划的关键不在于准时,而在于每周都有产出。语言机制如果不落到代码上,遗忘速度会非常快。如果某一周的任务没有完成,宁可延长这一周,也不要为了赶进度跳过动手环节。
每周结束时,可以用三个问题自查:这一周学到的机制,我在自己的代码里验证过吗?遇到报错时,我是读懂了报错还是绕过去了?如果现在合上书,我能向别人讲清楚这一周最核心的那个概念吗?三个问题里只要有一个答不上来,就值得回头补一补再往下走。
按问题定位:十个常见入口
如果你不是想「学完一本书」,而是此刻被某个具体问题卡住了,可以直接查下表。左边是你遇到的现象,右边是应该先读的节。
| 你遇到的问题 | 先去读 |
|---|---|
| 某个赋值莫名其妙报错,不知道违反了什么规则 | 1.1 结构化类型与兼容性判定 |
运行时想判断一个对象是不是某个接口,发现 instanceof 没用 | 1.2 类型擦除与运行时边界 |
| 泛型函数推导出的类型总是偏「宽」,和预期不符 | 1.3 类型推导算法与上下文类型 |
| 写了一个类型工具,遇到联合类型就得到奇怪的结果 | 2.1 条件类型与分发 |
| 类型工具越写越绕,还经常报「类型实例化过深」 | 2.2 infer 与递归、3.2 尾递归消除与深度限制 |
tsc 或编辑器越来越卡,不知道慢在哪 | 3.1 类型实例化开销与测量、3.3 复杂泛型的重构手法 |
| 想把类型信息带到运行时,做依赖注入或 AOP | 4.2 reflect-metadata 与依赖注入容器、4.3 AOP 与运行时类型信息 |
| 想写一个构建插件或批量改写代码的脚本 | 5.2 自定义 transformer、6.3 重构工具与 codemod |
| 发布的包用户 import 报错,或类型解析对不上 | 7.1 .d.ts 生成与 exports 映射、9.1 moduleResolution 各模式对照 |
| 接口返回的数据类型对不上,运行时才发现 | 10.1 类型守卫与验证库原理、10.3 边界数据与不可信输入 |
这张表覆盖的是最高频的十类问题。如果你的问题不在表里,可以先用关键词在目录里定位章节,再结合每节的「小结」判断是否命中。
需要提醒的是,上表给的是「最快解药」,不是「唯一答案」。很多现象背后是同一个根因——比如类型解析对不上,往往既要在 package.json 的 exports 里补条件,也要检查 moduleResolution 模式;表里给出的两到三节,建议按顺序读完再动手改代码。
分部分章节
下面按四个部分列出全部 11 章 33 节,每一行给出编号、标题与一句话说明。
表格里的编号规则是「章.节」,例如 7.2 表示第 7 章第 2 节。点击标题即可进入该节正文。每个部分开头都有一段导读,说明这一部分在整个推进顺序中的位置;如果你只想知道某节讲什么,直接看表格第三列的说明即可。
正文的每一节都遵循「编号标题 → 编号子小节(N.N.x)→ 小结」的写法,不少节末尾还有一段「与本书其它章节的衔接」,所以即使你从中间某节切入,也能顺着衔接线索找到上下文,不必担心前情缺失。
四个部分的规模与职责如下,可以先扫一眼,判断自己该重点读哪一部分:
| 部分 | 章节 | 节数 | 解决的问题 |
|---|---|---|---|
| 第一部分 类型系统与类型级编程 | 第 1–3 章 | 9 | 类型如何判定、如何被计算、代价从哪来 |
| 第二部分 元编程与工具链 | 第 4–6 章 | 9 | 如何用装饰器、编译器 API 与语言服务改造工具链 |
| 第三部分 库作者、运行时与模块 | 第 7–9 章 | 9 | 如何发布一个库,并理解它在运行时与模块系统里的行为 |
| 第四部分 边界、生态与架构 | 第 10–11 章 | 6 | 如何在系统边界守住类型,并让类型沉淀为团队架构 |
| 合计 | 第 1–11 章 | 33 | 一条从语言机制到工程落地的完整进阶路径 |
各部分之间的依赖关系
四个部分不是平行关系,而是层层依赖的。下面这张表说明每一部分依赖什么、又被谁依赖,方便你判断能不能跳过某一部分:
| 部分 | 依赖 | 被依赖 | 能否跳过 |
|---|---|---|---|
| 第一部分 类型系统与类型级编程 | 无 | 全部后续部分 | 不建议跳过,是全书的判定规则地基 |
| 第二部分 元编程与工具链 | 第一部分 | 第三、四部分 | 只做业务开发可按需选读 |
| 第三部分 库作者、运行时与模块 | 第一部分 | 第四部分 | 不发布库者可按需选读 |
| 第四部分 边界、生态与架构 | 全部前三部分 | 无 | 可在有真实项目时再读 |
一个实用的判断原则是:第一部分是绕不过去的地基,其余部分都可以根据你的实际工作取舍。如果你在写库或工具,第二、三部分值得尽早补上;如果你只做业务开发,第二、三部分可以压缩到 4.2、5.1、9.1 这几节,把时间留给第 10、11 章的边界与架构。
需要补充的是,这张表描述的是「知识依赖」,不是「阅读顺序」。你完全可以在读第二部分的同时穿插读第三部分,只要保证遇到跨端类型问题时回头补齐第 10 章的边界校验即可。
第一部分:类型系统与类型级编程(第 1–3 章)
这一部分是全书的地基,解决「类型到底是怎么被判定和被计算的」。第 1 章讲类型系统原理——结构化兼容、类型擦除、类型推导,它们决定了你写的每一个类型在编译器眼里是什么;第 2 章把类型系统当成一门可编程的语言,讲条件类型、infer 与类型级数据结构;第 3 章回到工程,讲这套机制在编译期付出的代价,以及如何治理。
三章是层层递进的关系:不理解第 1 章的判定规则,第 2 章的类型级技巧会变成「照着抄但不明白」;不理解第 2 章的可计算性,第 3 章的实例化开销就无从谈优化。节奏上,第 1 章请慢读并把报错信息读透,第 2 章要动手写几个类型工具,第 3 章可以等到编译真的变慢时再回头精读。
这一部分有一个容易被跳过的细节:类型擦除意味着运行时什么都不会留下。很多「为什么 instanceof 对接口没用」「为什么泛型信息在运行时消失了」的困惑,根都在 1.2 节。
| 编号 | 章节 | 说明 |
|---|---|---|
| 1.1 | 结构化类型与兼容性判定 | 把「A 能否赋给 B」从直觉变成可复述的规则,并解释参数逆变与返回值协变 |
| 1.2 | 类型擦除与运行时边界 | 讲清类型只活在编译期,运行时什么都不会留下,以及由此带来的边界问题 |
| 1.3 | 类型推导算法与上下文类型 | 从推导方向与上下文类型理解编译器怎么「猜」类型,以及猜错时怎么引导它 |
| 2.1 | 条件类型与分发 | 用条件类型做类型分支,并解释裸类型参数带来的分发行为 |
| 2.2 | infer 与递归 | 用 infer 从结构中提取类型,并靠递归构造可终止的类型计算 |
| 2.3 | 类型级数据结构与图灵完备 | 在类型层面实现元组、映射与队列,理解类型系统可计算的能力边界 |
| 3.1 | 类型实例化开销与测量 | 定位编译变慢的元凶,并用 --extendedDiagnostics 把开销量化出来 |
| 3.2 | 尾递归消除与深度限制 | 认识实例化深度上限,并把递归改写成可被尾递归消除的形式 |
| 3.3 | 复杂泛型的重构手法 | 用重载、接口拆分与类型工具降低复杂泛型的理解成本与编译成本 |
第二部分:元编程与工具链(第 4–6 章)
这一部分回答「除了写类型,还能用 TypeScript 做什么」。第 4 章讲装饰器与元编程——标准装饰器、reflect-metadata 与依赖注入、AOP,它们让类型信息在运行时重新变得可用;第 5 章下沉到编译器,讲 Compiler API、自定义 transformer 与 AST 代码生成;第 6 章再往上一层,讲语言服务与编辑器,包括 TS Server、自定义 tsPlugin 与 codemod。
三章之间有明确的依赖方向:第 4 章关注「运行时能拿到什么」,第 5 章关注「编译期能改什么」,第 6 章关注「编辑器里能补什么」。做框架的人重点读第 4 章,做构建插件的人重点读第 5 章,做编辑器工具或大规模重构的人重点读第 6 章。如果时间紧张,5.1 与 5.2 是这一部分性价比最高的两节。
一个务实的读法是:先挑一个你手头真实存在的小需求(比如给某个函数自动加日志、或写一个批量改 import 的脚本),带着它去读对应章节,读完立刻落地。元编程的知识如果不落到一个真实需求上,很容易读完就忘。
这一部分也是全书「代码量最大」的一块:装饰器与 transformer 都需要你真正写出来、跑起来,才能体会到「类型信息在运行时是怎么被重建的」或「AST 改写为什么比字符串替换可靠」。如果你只是把这三章当读物过一遍,收获会明显小于第 1 章那种偏原理的内容——请务必留出动手时间。
| 编号 | 章节 | 说明 |
|---|---|---|
| 4.1 | 标准装饰器(TS 5.x) | 对照旧装饰器讲清 TC39 标准装饰器的语义、能力与迁移路径 |
| 4.2 | reflect-metadata 与依赖注入容器 | 用元数据把类型信息带到运行时,并实现一个类型化的 DI 容器 |
| 4.3 | AOP 与运行时类型信息 | 用装饰器织入横切逻辑,并守住「运行时类型信息」这件事的边界 |
| 5.1 | TypeScript Compiler API 入门 | 用 Compiler API 解析源码、遍历 AST 并产出诊断信息 |
| 5.2 | 自定义 transformer | 编写自定义 transformer,在编译期改写 AST 并接入构建流程 |
| 5.3 | AST 与代码生成 | 用工厂函数构造节点,把 AST 还原为可读、可格式化的源码文本 |
| 6.1 | TS Server 与 LSP | 理解 TS Server 的协议与增量语言服务,为编辑器插件打基础 |
| 6.2 | 自定义 tsPlugin | 编写 tsserver 插件,扩展补全、诊断与代码操作 |
| 6.3 | 重构工具与 codemod | 用 codemod 工具批量改写代码,安全落地大范围重构 |
第三部分:库作者、运行时与模块(第 7–9 章)
这一部分把视角从「写代码」转到「交付代码」。第 7 章讲库作者要面对的全部问题——生成 .d.ts、用 exports 映射暴露类型入口、同时发布 ESM 与 CJS 双包、判断哪些改动属于破坏性变更;第 8 章下沉到运行时,讲 V8 的类型反馈与 JIT、类型擦除后对象的真实形态、以及怎么用火焰图做剖析;第 9 章讲模块与解析深水区,包括各 moduleResolution 模式、条件导出与循环依赖。
三章串起来是一条完整的交付链路:第 7 章决定「你发布出去的东西长什么样」,第 8 章决定「它在用户机器上跑得多快」,第 9 章决定「它能不能被正确解析并加载」。只发布过一两个小包的人,建议把第 7 章与第 9 章连着读;对运行时性能有要求的人,第 8 章的三节建议全读。
这一部分最值得带走的一条原则是:库的边界是契约,不是实现细节。exports 字段、声明文件、semver 版本号,都是你与用户之间的契约;改动它们之前先想清楚「这是不是一次破坏性变更」,比事后道歉划算得多。
| 编号 | 章节 | 说明 |
|---|---|---|
| 7.1 | .d.ts 生成与 exports 映射 | 生成可发布的声明文件,并用 exports 映射暴露类型入口 |
| 7.2 | 双包(ESM/CJS)与类型解析 | 同时发布 ESM 与 CJS 产物,并让类型解析各归其位 |
| 7.3 | semver、发布与类型破坏性变更 | 判断哪些类型改动属于破坏性变更,并据此规划版本号 |
| 8.1 | V8 类型反馈与 JIT | 理解 V8 如何依据类型反馈优化热点,并写出对 JIT 友好的代码 |
| 8.2 | 类型擦除后的运行时形态 | 从编译产物看类型擦除后的对象形态、隐藏类与属性访问成本 |
| 8.3 | 性能剖析与火焰图 | 用 profiler 与火焰图定位运行时热点,而不是凭直觉优化 |
| 9.1 | moduleResolution 各模式对照 | 对照 node10、node16、bundler 各模式的解析差异与适用场景 |
| 9.2 | 条件导出与 bundler 语义 | 用条件导出在不同环境下暴露不同入口,并理解其匹配优先级 |
| 9.3 | 循环依赖与类型-only 导入 | 用 import type 与依赖分层切断循环,并避免运行时副作用 |
第四部分:边界、生态与架构(第 10–11 章)
最后一部分把前三部分的机制收束成两条实践主线。第 10 章讲「类型安全的运行时边界」——静态类型在运行时失效,边界上的数据必须被校验;这一章给出类型守卫与验证库原理、序列化往返的类型处理,以及面对不可信输入时的做法。第 11 章讲「生态与演进」——各版本的 breaking changes 怎么评估、存量项目怎么渐进式迁移并逐步严格化、以及怎么让类型从个人习惯升级为团队规范。
两章的顺序建议不要颠倒:先把第 10 章的边界守住,第 11 章的架构讨论才有落脚点——否则「类型驱动架构」很容易变成一句口号。如果你正负责一个存量项目,第 11 章的 11.2 与 11.3 可以直接当作行动清单来读。
这一部分最短,但它是全书的收口。很多项目的技术能力并不差,卡住的地方往往是「边界数据没校验」和「没有统一的类型规范」这两件事;第 10、11 章就是针对这两件事写的。
读完之后,你应该能回答三个问题:系统边界上的数据,我用什么方式证明它是可信的?存量项目要开启严格检查,我按什么顺序推进?团队里的类型约定,是写在文档里还是写在类型里?这三问如果都能答上,说明前三个部分的机制已经真正被你转化成了工程判断。
| 编号 | 章节 | 说明 |
|---|---|---|
| 10.1 | 类型守卫与验证库原理 | 从用户自定义类型守卫讲到 Zod 一类库的类型推导机制 |
| 10.2 | 序列化与反序列化类型 | 给 JSON 往返、Date 与 Map 等场景补上类型与校验 |
| 10.3 | 边界数据与不可信输入 | 在系统边界做「解析而非断言」,把不可信输入收敛为可信类型 |
| 11.1 | TS 版本演进与 breaking changes | 梳理各版本的关键变更,评估升级路径与迁移代价 |
| 11.2 | 渐进式迁移与严格化路径 | 在存量项目里分阶段开启严格检查,并收敛历史报错 |
| 11.3 | 类型驱动架构与团队规范 | 用类型表达领域约束,并把它沉淀为团队可执行的规范 |
本篇与其他内容
本页是全书唯一的导航篇,不承载具体技术内容。它的价值在于「在你需要的时候,三秒钟内把你送到正确的那一节」。
| 位置 | 标题 | 说明 |
|---|---|---|
| 目录 | 《TypeScript高级编程》目录 | 全书导航、三条学习路径与 33 节索引(即本页) |
需要说明的是,本书没有序与附录篇,正文 33 节之外只有这一页。如果你还需要 TypeScript 的语法基础与工具类型速查,可以阅读同一系列的入门卷《TypeScript编程入门》;如果你更关心「把类型用在真实项目里怎么落地」,可以读实战卷《TypeScript编程实战》。三本书共用同一套术语与代码约定,衔接最顺。
三卷的分工可以这样理解:入门卷回答「这门语言能做什么」,实战卷回答「在真实项目里该怎么做」,本卷回答「语言本身是怎么工作的、能被扩展成什么」。如果只读其中一本,入门卷让你写对代码,实战卷让你写稳项目,本卷让你把语言用成一件称手的工具——后者更依赖对机制的理解,也更容易在遇到具体问题时被反复查阅。
相关专题
本书之外,本站还有若干 TypeScript 专题文章,可作为读完之后的延伸阅读。它们与本书的章节有明确对应关系:
| 延伸阅读 | 对应本书章节 |
|---|---|
| TypeScript 类型级编程 | 与第 2 章呼应,展开类型级数据结构的更多写法 |
| TypeScript 项目架构与 tsconfig | 与第 1、3 章呼应,展开工程配置与编译性能治理 |
| TypeScript 模块解析(ESM/CJS) | 与第 9 章呼应,深入模块解析模式与双包发布 |
| TypeScript 构建性能优化 | 与第 3、8 章呼应,讲解构建速度与产物治理 |
| TypeScript CLI 开发 | 与第 5、6 章呼应,展开编译器 API 与工具链开发 |
| TypeScript 测试的类型安全 | 与第 10、11 章呼应,讲类型测试与边界校验 |
这些专题与本书不是重复关系:本书给的是「一条完整的进阶路径」,专题给的是「某一个点上更深的做法」。遇到具体问题时,先回目录定位章节,再顺着对应专题深挖。
反过来,如果你已经在某个专题里踩过坑,读本书对应章节时会有明显的「对上了」的感觉——本书会把那些零散的经验放回一条完整的机制链路里,告诉你它在整体中的位置。这也是本页把它们列出来的原因。
建议的用法是:读完本书的某一章之后,顺手翻一翻对应的专题,把这一章建立的机制认知落到一个更具体的做法上;或者反过来,先在专题里解决一个眼前的实际问题,再回到本书补上它背后的原理。两种顺序都成立,关键是不要让「原理」与「做法」长期分家。
小结
这一页的核心信息可以浓缩成三句话:
- 结构上,全书是「正文 11 章 33 节 + 本篇目录」,按语言机制到工程落地的顺序分为类型系统与类型级编程、元编程与工具链、库作者运行时与模块、边界生态与架构四个部分。
- 路径上,刚学完语法按顺序通读,已有工程经验从第 4 章切入或走 11 节主线速读清单,已会用可当参考手册按需查。
- 方法上,每一节都遵循「编号标题 → 编号子小节(N.N.x)→ 小结」的写法,可以独立阅读,也可以顺着「与本书其它章节的衔接」跳读。
如果你已经选好了路径,可以直接从对应的章节开始。每一节的末尾都会指向下一节或相邻章节,跟着走不会迷路。
最后补一条使用建议:读本书时,请把「这一节我要解决什么问题」写在便签上,读完对照「小结」检查一遍。语言机制类内容的特点是「读的时候都懂,用的时候想不起来」,而目录加小结的组合,正是为了在你想不起来时能最快回到现场。
最后再重复一句:本页不需要从头读到尾。它的作用是「在你需要的时候,三秒钟内把你送到正确的那一节」。把这一页加进书签,比记住任何章节编号都有用。
如果你只打算记住一件事,那就记住这条主线:类型是编译期的结构,运行时不会留下它。第 1 章建立这个认知,第 2、3 章在它之上讨论「能算什么、代价多少」,第 4 至 6 章讨论「怎么在编译期与运行时之间搬运信息」,第 7 至 9 章讨论「交付出去后它长什么样」,第 10、11 章讨论「它失效时你靠什么兜底」。33 节都在围绕这一条主线展开。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。