《TypeScript高级编程》全 34 节,写给库作者、框架作者与工具链开发者:从类型系统原理一路深入到编译器 API 与运行时。
本页是《TypeScript高级编程》的全书目录:按章节顺序列出全部 34 节,点击标题直达正文。也可以从各节的「上一篇 / 下一篇」按顺序通读。
全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《TypeScript高级编程》 |
| 章节数 | 34 节 |
| 领域 | TypeScript 类型系统深处与工具链 |
| 阅读方式 | 从「目录」篇进入按顺序通读,或按章节表跳读 |
| 上级专题 | 书稿专题 |
全书目录
前置:序、前言与目录
| 节 | 文章 | 核心内容 |
|---|---|---|
| — | 《TypeScript高级编程》目录 | 《TypeScript高级编程》全书导航页:说明本书写给谁、解决什么问题,给出完整通读、主线速读与当… |
第 1 章 类型系统原理
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 1.1 结构化类型与兼容性判定 | 本节把「类型 A 能否赋给类型 B」从直觉变成可复述的规则:先对照名义类型理解结构化类型为何只看成员… |
| 1.2 | 1.2 类型擦除与运行时边界 | 本节把 tsc 的编译产物摊开看,讲清类型擦除删掉了什么、留下了什么。内容涵盖擦除的基本规则与产物对… |
| 1.3 | 1.3 类型推导算法与上下文类型 | 本节讲清编译器在没有标注时如何猜出类型。内容涵盖自下而上推断与自上而下上下文类型这两条相反的流水线、… |
第 2 章 类型级编程
| 节 | 文章 | 核心内容 |
|---|---|---|
| 2.1 | 2.1 条件类型与分发 | 本节从条件类型的语法与可赋值性判定讲起,重点剖析「分发」这一最反直觉的行为:为什么裸类型参数会让联合… |
| 2.2 | 2.2 infer 与递归 | 本节讲解 infer 在条件类型中做模式匹配与类型提取的规则:推断位置受协变与逆变影响的结果、同一推… |
| 2.3 | 2.3 类型级数据结构与图灵完备 | 本节把条件类型与 infer 拼成类型级的数据结构与算法:以元组模拟数组与单链表、用元组长度实现类型… |
第 3 章 类型性能治理
| 节 | 文章 | 核心内容 |
|---|---|---|
| 3.1 | 3.1 类型实例化开销与测量 | 本节把「类型算得多贵」变成可测量的数字:讲清编译器内部的一次类型实例化究竟是什么、泛型与映射类型何时… |
| 3.2 | 3.2 尾递归消除与深度限制 | 本节拆解编译器为递归类型设下的三道闸门:单次实例化深度、总实例化次数与尾递归预算,说明 2589 报… |
| 3.3 | 3.3 复杂泛型的重构手法 | 本节给出一套把又慢又深又难读的泛型改小的可操作手法:先用三个信号判断「该不该重构」,再逐一演示具名化… |
第 4 章 装饰器与元编程
| 节 | 文章 | 核心内容 |
|---|---|---|
| 4.1 | 4.1 标准装饰器(TS 5.x) | 本节讲 TypeScript 5.x 原生支持的标准(Stage 3)装饰器:说清它与旧版 expe… |
| 4.2 | 4.2 reflect-metadata 与依赖注入容器 | 本节解决标准装饰器拿不到类型信息的问题:reflect-metadata 如何为对象挂上元数据表,再… |
| 4.3 | 4.3 AOP 与运行时类型信息 | 本节讲面向切面编程在 TypeScript 里的三种实现路径:装饰器、Proxy、编译期转换,给出各… |
第 5 章 编译器 API
| 节 | 文章 | 核心内容 |
|---|---|---|
| 5.1 | 5.1 TypeScript Compiler API 入门 | 本节把 tsc 拆成一个可编程的库。先用 ts.createSourceFile 做单文件语法解析,… |
| 5.2 | 5.2 自定义 transformer | 本节动手写一个真正的 transformer。先讲清 TransformerFactory 的两级签… |
| 5.3 | 5.3 AST 与代码生成 | 本节聚焦语法树的读取与生成。先看清 Node、NodeArray 与 Token 的结构差别,再用 … |
第 6 章 语言服务与编辑器
| 节 | 文章 | 核心内容 |
|---|---|---|
| 6.1 | 6.1 TS Server 与 LSP | 本节从编辑器里那次「跳转到定义」讲起,说明 IDE 的类型提示并非由 tsc 提供,而是由一个常驻的… |
| 6.2 | 6.2 自定义 tsPlugin | 本节先厘清「tsPlugin」在 TS 生态里的三种含义:语言服务插件、编辑器扩展与编译期 tran… |
| 6.3 | 6.3 重构工具与 codemod | 本节讲批量改写 TypeScript 代码的完整方法论。先对比三类手段:语言服务的安全重命名、Com… |
第 7 章 声明文件与库作者
| 节 | 文章 | 核心内容 |
|---|---|---|
| 7.1 | 7.1 .d.ts 生成与 exports 映射 | 讲清包如何向消费者交付类型:用 declaration 与 emitDeclarationOnly … |
| 7.2 | 7.2 双包(ESM/CJS)与类型解析 | 同一个包如何同时被 ESM 与 CJS 消费者使用,又让两套类型各自对得上?本节先讲清 type 字… |
| 7.3 | 7.3 semver、发布与类型破坏性变更 | 对库作者而言,类型层的破坏性变更比运行时更难察觉——代码照跑,用户却编译不过。本节先给出一份类型破坏… |
第 8 章 运行时与引擎
| 节 | 文章 | 核心内容 |
|---|---|---|
| 8.1 | 8.1 V8 类型反馈与 JIT | 本节把 TypeScript 的类型声明放到一边,转而看真正执行代码的那台机器:V8 如何用 Ign… |
| 8.2 | 8.2 类型擦除后的运行时形态 | 类型擦除不是一句「类型都没了」就能带过:本节逐条对照 .ts 与编译产物,看清哪些语法被彻底删除、哪… |
| 8.3 | 8.3 性能剖析与火焰图 | 凭直觉优化性能几乎总是错的。本节把「先测量、再优化」落成可执行的流程:用 –cpu-prof 与 … |
第 9 章 模块与解析深水区
| 节 | 文章 | 核心内容 |
|---|---|---|
| 9.1 | 9.1 moduleResolution 各模式对照 | 本节把 TypeScript 的模块解析讲成一张对照表:先说明编译器为何要自己实现解析规则,再拆解 … |
| 9.2 | 9.2 条件导出与 bundler 语义 | 本节深入 package.json 的 exports 字段:先讲它如何取代 main 与 modu… |
| 9.3 | 9.3 循环依赖与类型-only 导入 | 本节解决工程中最隐蔽的一类问题:循环依赖与类型导入。先对比 ESM 与 CJS 下循环依赖的不同表现… |
第 10 章 类型安全的运行时边界
| 节 | 文章 | 核心内容 |
|---|---|---|
| 10.1 | 10.1 类型守卫与验证库原理 | 本节讲运行时校验的第一道防线:类型守卫与验证库。先说清 is 守卫的声明本质与它并不能真正校验的事实… |
| 10.2 | 10.2 序列化与反序列化类型 | 本节讲数据写出再读回这条边界上类型如何失真。先说清 JSON.stringify 与 JSON.pa… |
| 10.3 | 10.3 边界数据与不可信输入 | 本节把不可信输入单独拎出来讲。先定义信任边界划在哪里,再讲透「解析而非校验」这条原则与品牌类型如何把… |
第 11 章 生态与演进
| 节 | 文章 | 核心内容 |
|---|---|---|
| 11.1 | 11.1 TS 版本演进与 breaking changes | 本节梳理 TypeScript 从 1.x 到 5.x 的演进主线,把 breaking chang… |
| 11.2 | 11.2 渐进式迁移与严格化路径 | 本节给出从 JavaScript 或宽松 TypeScript 迁移到严格模式的路径:先用 allo… |
| 11.3 | 11.3 类型驱动架构与团队规范 | 本节把类型从「事后补的注解」提升为架构约束:用品牌类型表达不可互换的标识、用可辨识联合表达状态机、用… |