posts

《TypeScript高级编程》 · 全书目录与章节索引(34 节)

《TypeScript高级编程》全 34 节,写给库作者、框架作者与工具链开发者。从结构化类型与兼容性判定讲起,依次深入类型级编程、类型性能治理、装饰器与元编程、编译器 API 与自定义 transformer、语言服务与编辑器插件、声明文件与双包发布、V8 运行时与性能剖析、模块解析深水区,最后讨论类型安全的运行时边界与生态演进。每节都是可直接阅读的独立文章,本页给出全书分章目录。

《TypeScript高级编程》全 34 节,写给库作者、框架作者与工具链开发者:从类型系统原理一路深入到编译器 API 与运行时。

本页是《TypeScript高级编程》的全书目录:按章节顺序列出全部 34 节,点击标题直达正文。也可以从各节的「上一篇 / 下一篇」按顺序通读。

全书概览

项目内容
书稿《TypeScript高级编程》
章节数34 节
领域TypeScript 类型系统深处与工具链
阅读方式从「目录」篇进入按顺序通读,或按章节表跳读
上级专题书稿专题

全书目录

前置:序、前言与目录

节文章核心内容
—《TypeScript高级编程》目录《TypeScript高级编程》全书导航页:说明本书写给谁、解决什么问题,给出完整通读、主线速读与当…

第 1 章 类型系统原理

节文章核心内容
1.11.1 结构化类型与兼容性判定本节把「类型 A 能否赋给类型 B」从直觉变成可复述的规则:先对照名义类型理解结构化类型为何只看成员…
1.21.2 类型擦除与运行时边界本节把 tsc 的编译产物摊开看,讲清类型擦除删掉了什么、留下了什么。内容涵盖擦除的基本规则与产物对…
1.31.3 类型推导算法与上下文类型本节讲清编译器在没有标注时如何猜出类型。内容涵盖自下而上推断与自上而下上下文类型这两条相反的流水线、…

第 2 章 类型级编程

节文章核心内容
2.12.1 条件类型与分发本节从条件类型的语法与可赋值性判定讲起,重点剖析「分发」这一最反直觉的行为:为什么裸类型参数会让联合…
2.22.2 infer 与递归本节讲解 infer 在条件类型中做模式匹配与类型提取的规则:推断位置受协变与逆变影响的结果、同一推…
2.32.3 类型级数据结构与图灵完备本节把条件类型与 infer 拼成类型级的数据结构与算法:以元组模拟数组与单链表、用元组长度实现类型…

第 3 章 类型性能治理

节文章核心内容
3.13.1 类型实例化开销与测量本节把「类型算得多贵」变成可测量的数字:讲清编译器内部的一次类型实例化究竟是什么、泛型与映射类型何时…
3.23.2 尾递归消除与深度限制本节拆解编译器为递归类型设下的三道闸门:单次实例化深度、总实例化次数与尾递归预算,说明 2589 报…
3.33.3 复杂泛型的重构手法本节给出一套把又慢又深又难读的泛型改小的可操作手法:先用三个信号判断「该不该重构」,再逐一演示具名化…

第 4 章 装饰器与元编程

节文章核心内容
4.14.1 标准装饰器(TS 5.x)本节讲 TypeScript 5.x 原生支持的标准(Stage 3)装饰器:说清它与旧版 expe…
4.24.2 reflect-metadata 与依赖注入容器本节解决标准装饰器拿不到类型信息的问题:reflect-metadata 如何为对象挂上元数据表,再…
4.34.3 AOP 与运行时类型信息本节讲面向切面编程在 TypeScript 里的三种实现路径:装饰器、Proxy、编译期转换,给出各…

第 5 章 编译器 API

节文章核心内容
5.15.1 TypeScript Compiler API 入门本节把 tsc 拆成一个可编程的库。先用 ts.createSourceFile 做单文件语法解析,…
5.25.2 自定义 transformer本节动手写一个真正的 transformer。先讲清 TransformerFactory 的两级签…
5.35.3 AST 与代码生成本节聚焦语法树的读取与生成。先看清 Node、NodeArray 与 Token 的结构差别,再用 …

第 6 章 语言服务与编辑器

节文章核心内容
6.16.1 TS Server 与 LSP本节从编辑器里那次「跳转到定义」讲起,说明 IDE 的类型提示并非由 tsc 提供,而是由一个常驻的…
6.26.2 自定义 tsPlugin本节先厘清「tsPlugin」在 TS 生态里的三种含义:语言服务插件、编辑器扩展与编译期 tran…
6.36.3 重构工具与 codemod本节讲批量改写 TypeScript 代码的完整方法论。先对比三类手段:语言服务的安全重命名、Com…

第 7 章 声明文件与库作者

节文章核心内容
7.17.1 .d.ts 生成与 exports 映射讲清包如何向消费者交付类型:用 declaration 与 emitDeclarationOnly …
7.27.2 双包(ESM/CJS)与类型解析同一个包如何同时被 ESM 与 CJS 消费者使用,又让两套类型各自对得上?本节先讲清 type 字…
7.37.3 semver、发布与类型破坏性变更对库作者而言,类型层的破坏性变更比运行时更难察觉——代码照跑,用户却编译不过。本节先给出一份类型破坏…

第 8 章 运行时与引擎

节文章核心内容
8.18.1 V8 类型反馈与 JIT本节把 TypeScript 的类型声明放到一边,转而看真正执行代码的那台机器:V8 如何用 Ign…
8.28.2 类型擦除后的运行时形态类型擦除不是一句「类型都没了」就能带过:本节逐条对照 .ts 与编译产物,看清哪些语法被彻底删除、哪…
8.38.3 性能剖析与火焰图凭直觉优化性能几乎总是错的。本节把「先测量、再优化」落成可执行的流程:用 –cpu-prof 与 …

第 9 章 模块与解析深水区

节文章核心内容
9.19.1 moduleResolution 各模式对照本节把 TypeScript 的模块解析讲成一张对照表:先说明编译器为何要自己实现解析规则,再拆解 …
9.29.2 条件导出与 bundler 语义本节深入 package.json 的 exports 字段:先讲它如何取代 main 与 modu…
9.39.3 循环依赖与类型-only 导入本节解决工程中最隐蔽的一类问题:循环依赖与类型导入。先对比 ESM 与 CJS 下循环依赖的不同表现…

第 10 章 类型安全的运行时边界

节文章核心内容
10.110.1 类型守卫与验证库原理本节讲运行时校验的第一道防线:类型守卫与验证库。先说清 is 守卫的声明本质与它并不能真正校验的事实…
10.210.2 序列化与反序列化类型本节讲数据写出再读回这条边界上类型如何失真。先说清 JSON.stringify 与 JSON.pa…
10.310.3 边界数据与不可信输入本节把不可信输入单独拎出来讲。先定义信任边界划在哪里,再讲透「解析而非校验」这条原则与品牌类型如何把…

第 11 章 生态与演进

节文章核心内容
11.111.1 TS 版本演进与 breaking changes本节梳理 TypeScript 从 1.x 到 5.x 的演进主线,把 breaking chang…
11.211.2 渐进式迁移与严格化路径本节给出从 JavaScript 或宽松 TypeScript 迁移到严格模式的路径:先用 allo…
11.311.3 类型驱动架构与团队规范本节把类型从「事后补的注解」提升为架构约束:用品牌类型表达不可互换的标识、用可辨识联合表达状态机、用…
全部文章 Game Golang Saas Rust 游戏开发 客户端开发 GameDev TypeScript Lua Products
typescript

《TypeScript高级编程》11.3 类型驱动架构与团队规范

本节把类型从「事后补的注解」提升为架构约束:用品牌类型表达不可互换的标识、用可辨识联合表达状态机、用 schema 作为契约的单一事实来源,把「谁能调用谁」写进编译期。再给出团队落地方法,包括 tsconfig 基线继承、项目引用、CI 类型门禁与类型债务台账。读完你能设计出新人自动写出合规代码的仓库结构。

9 分钟阅读
TypeScript TypeScript高级编程 类型驱动设计
typescript

《TypeScript高级编程》11.2 渐进式迁移与严格化路径

本节给出从 JavaScript 或宽松 TypeScript 迁移到严格模式的路径:先用 allowJs 与 checkJs 按目录纳管边界,再按 noImplicitAny、strictNullChecks、strictFunctionTypes 的依赖顺序分批开启,配合 ts-expect-error 台账与错误计数棘轮把债务变成可度量指标。读完你能把十万行项目拆成不停机、可回滚的批次。

9 分钟阅读
TypeScript TypeScript高级编程 渐进式迁移
typescript

《TypeScript高级编程》11.1 TS 版本演进与 breaking changes

本节梳理 TypeScript 从 1.x 到 5.x 的演进主线,把 breaking change 归为检查收紧、默认值变更、lib.d.ts 更新与废弃项移除四类,并逐类给出可复现的报错示例与回退边界。你会掌握一套「基线快照 + 目标版本双跑 + 增量 diff」的升级流程,能在升级前量化影响面、判断某个报错是版本所致还是代码本身的问题。读完你能为团队定下可回滚的升级节奏。

10 分钟阅读
TypeScript TypeScript高级编程 版本升级
typescript

《TypeScript高级编程》10.3 边界数据与不可信输入

本节把不可信输入单独拎出来讲。先定义信任边界划在哪里,再讲透「解析而非校验」这条原则与品牌类型如何把 unknown 变成领域类型,然后逐一过 HTTP 请求、环境变量、第三方 API、数据库四条真实边界,最后深入原型污染与深合并的攻击面、禁止 as 跨边界的 lint 配置。读完你能为自己的服务画出信任边界图,并在每条边界上写出可测试、可穷尽的解析代码。

11 分钟阅读
TypeScript TypeScript高级编程 不可信输入
typescript

《TypeScript高级编程》10.2 序列化与反序列化类型

本节讲数据写出再读回这条边界上类型如何失真。先说清 JSON.stringify 与 JSON.parse 在类型上的不对称,再列出 Date、BigInt、undefined、NaN、Map、循环引用的失真清单与报错,然后用编解码器 Codec 把线上格式与内存类型显式分开,讲透版本迁移、replacer/reviver 的用法与二进制格式取舍。读完你能为持久化与消息协议设计出类型安全的边界。

9 分钟阅读
TypeScript TypeScript高级编程 序列化
typescript

《TypeScript高级编程》10.1 类型守卫与验证库原理

本节讲运行时校验的第一道防线:类型守卫与验证库。先说清 is 守卫的声明本质与它并不能真正校验的事实,再拆解手写守卫在嵌套对象、数组、穷尽性检查上的漏判与误判,然后从零实现一个以 schema 为唯一事实来源的验证器,讲透 parse 与 safeParse 的分工和 InferOutput 类型推导的原理。读完你能为项目选对守卫写法,并看懂主流验证库的类型推导机制。

9 分钟阅读
TypeScript TypeScript高级编程 类型守卫
typescript

《TypeScript高级编程》9.3 循环依赖与类型-only 导入

本节解决工程中最隐蔽的一类问题:循环依赖与类型导入。先对比 ESM 与 CJS 下循环依赖的不同表现,解释暂时性死区与部分导出为何会让值在初始化阶段变成 undefined,再说明 import type 为什么能从产物中彻底消失、从而在结构上切断循环,随后对照三种类型导入写法的差异,最后给出检测工具与抽取共享类型的重构套路。

9 分钟阅读
TypeScript TypeScript高级编程 循环依赖
typescript

《TypeScript高级编程》9.2 条件导出与 bundler 语义

本节深入 package.json 的 exports 字段:先讲它如何取代 main 与 module 实现真正的封装,再拆解子路径映射、条件对象与数组回退三种形态,重点讲清条件键的顺序语义为何决定成败,然后对照 bundler 与 Node 在条件集合上的差异,最后给出一个可直接复制的双包库配置。读完你能自己写出既被 Node 认识、又让 TypeScript 找到类型的导出表。

9 分钟阅读
TypeScript TypeScript高级编程 条件导出
typescript

《TypeScript高级编程》9.1 moduleResolution 各模式对照

本节把 TypeScript 的模块解析讲成一张对照表:先说明编译器为何要自己实现解析规则,再拆解 classic、node10、node16、nodenext、bundler 五种模式在扩展名与条件导出上的差异,再给出 module 与 moduleResolution 的合法组合,最后用三种典型工程配置收束。读完你能为任意项目选对模式,并看懂 Cannot find module 报错。

9 分钟阅读
TypeScript TypeScript高级编程 moduleResolution
typescript

《TypeScript高级编程》8.3 性能剖析与火焰图

凭直觉优化性能几乎总是错的。本节把「先测量、再优化」落成可执行的流程:用 --cpu-prof 与 --prof 采集 CPU 剖析、用自顶向下与自底向上两种视角读火焰图、用堆快照定位内存泄漏,并解释采样开销、JIT 预热、异步栈与 source map 四个让剖析失真的陷阱。读完你能独立定位热点函数并验证优化是否真的有效。

9 分钟阅读
TypeScript TypeScript高级编程 火焰图
typescript

《TypeScript高级编程》8.2 类型擦除后的运行时形态

类型擦除不是一句「类型都没了」就能带过:本节逐条对照 .ts 与编译产物,看清哪些语法被彻底删除、哪些留下了运行时代码。重点讲 enum、namespace、参数属性、装饰器与类字段的真实编译结果,以及为什么 private 与 #private 在运行时完全不同。读完你能预判任意一段 TS 会编译成什么,并知道何时必须补运行时校验。

7 分钟阅读
TypeScript TypeScript高级编程 类型擦除
typescript

《TypeScript高级编程》8.1 V8 类型反馈与 JIT

本节把 TypeScript 的类型声明放到一边,转而看真正执行代码的那台机器:V8 如何用 Ignition 采集类型反馈、用隐藏类与内联缓存加速属性访问,再由 TurboFan 做推测式优化并在假设破裂时去优化。读完你能读懂 --trace-deopt 日志,知道哪些写法会让函数永远留在解释器里,并写出对 JIT 友好的代码。

9 分钟阅读
TypeScript TypeScript高级编程 V8 JIT
typescript

《TypeScript高级编程》7.3 semver、发布与类型破坏性变更

对库作者而言,类型层的破坏性变更比运行时更难察觉——代码照跑,用户却编译不过。本节先给出一份类型破坏性变更清单,再用 api-extractor 的 API 报告与类型测试把公开契约锁进 CI,最后梳理 changesets 驱动的发布流程、dist-tag 与弃用周期,让每个版本号都名副其实。

8 分钟阅读
TypeScript TypeScript高级编程 类型破坏性变更
typescript

《TypeScript高级编程》7.2 双包(ESM/CJS)与类型解析

同一个包如何同时被 ESM 与 CJS 消费者使用,又让两套类型各自对得上?本节先讲清 type 字段与文件扩展名如何共同决定模块格式,再给出 tsup 双入口构建与 exports 双条件的完整配置,最后剖析双包最危险的副作用——双包风险导致 instanceof 失效与状态分裂,并给出收敛策略。

9 分钟阅读
TypeScript TypeScript高级编程 ESM/CJS 双包
typescript

《TypeScript高级编程》6.3 重构工具与 codemod

本节讲批量改写 TypeScript 代码的完整方法论。先对比三类手段:语言服务的安全重命名、Compiler API 与 ts-morph 的结构化改写、文本替换的取舍;再用 ts-morph 写出一个可批量运行、幂等的 codemod,并处理打印格式、dry-run、回滚与验证。读完本节,你能把一次跨上百个文件的重构做成可重复执行、可审阅、可回滚的工程流程。

8 分钟阅读
TypeScript TypeScript高级编程 codemod
typescript

《TypeScript高级编程》6.2 自定义 tsPlugin

本节先厘清「tsPlugin」在 TS 生态里的三种含义:语言服务插件、编辑器扩展与编译期 transformer 极易混淆。重点是语言服务插件——模块导出约定、用 Proxy 包装 LanguageService 覆盖方法、拿 Program 与 TypeChecker 做语义分析、注入自定义诊断,以及调试与性能红线。读完本节,你能写出真正生效、可调试、不拖垮 TS Server 的插件。

8 分钟阅读
TypeScript TypeScript高级编程 语言服务插件
typescript

《TypeScript高级编程》6.1 TS Server 与 LSP

本节从编辑器里那次「跳转到定义」讲起,说明 IDE 的类型提示并非由 tsc 提供,而是由一个常驻的 TS Server 进程回答。你会弄清 TS Server 私有协议与 LSP 的分工、Project 的加载策略与生命周期,以及如何在 Node 中直接向它发请求做批量查询。读完本节,你能看懂编辑器日志里的协议报文,也为下一节编写 tsPlugin 打好基础。

9 分钟阅读
TypeScript TypeScript高级编程 语言服务