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高级编程》4.2 reflect-metadata 与依赖注入容器

本节解决标准装饰器拿不到类型信息的问题:reflect-metadata 如何为对象挂上元数据表,再拆解 emitDecoratorMetadata 发射的 design:type、design:paramtypes、design:returntype 三项与退化规则。再手写一个支持 Token 注册、递归解析与作用域的迷你依赖注入容器,并给出循环依赖、接口无法作 Token 等真实坑的解法。

8 分钟阅读
TypeScript TypeScript高级编程 reflect-metadata
typescript

《TypeScript高级编程》4.1 标准装饰器(TS 5.x)

本节讲 TypeScript 5.x 原生支持的标准(Stage 3)装饰器:说清它与旧版 experimentalDecorators 的语义差异,逐个拆解类、方法、访问器、字段的签名与执行顺序,重点讲 addInitializer 初始化钩子。读完你能用标准语法写不依赖第三方库的包装、注册与校验逻辑,看懂 useDefineForClassFields 等开关如何改变装饰器行为。

7 分钟阅读
TypeScript TypeScript高级编程 装饰器
typescript

《TypeScript高级编程》3.3 复杂泛型的重构手法

本节给出一套把又慢又深又难读的泛型改小的可操作手法:先用三个信号判断「该不该重构」,再逐一演示具名化中间结果、用 interface 承载形状、把校验挪到约束上、用映射表替代条件链、关闭意外分发、把计算下沉到代码生成、以及用类型测试锁定行为七种改法。每种手法都给出改前改后对照与实例化代价的变化,最后用一份评审清单把重构收成可复用的流程。

9 分钟阅读
TypeScript TypeScript高级编程 泛型重构
typescript

《TypeScript高级编程》3.2 尾递归消除与深度限制

本节拆解编译器为递归类型设下的三道闸门:单次实例化深度、总实例化次数与尾递归预算,说明 2589 报错在「太深」与「太多」两种情形下的不同成因与排查手法。重点讲透尾位置、终止条件和预算的区别,用累加器把反转式递归改写成可消除形态,并通过实测说明互递归也可能被优化。读完你能在撞上深度上限时判断该改写、该加计数器,还是该改用代码生成。

8 分钟阅读
TypeScript TypeScript高级编程 尾递归消除
typescript

《TypeScript高级编程》3.1 类型实例化开销与测量

本节把「类型算得多贵」变成可测量的数字:讲清编译器内部的一次类型实例化究竟是什么、泛型与映射类型何时被真正求值,再逐个拆解 tsc 的 extendedDiagnostics 与 generateTrace 输出,教你读懂 Instantiations、Types 与 Check time 三者的关系。最后给出实例化爆炸的四类来源与 CI 基线回归脚本,读完你能定位并量化真实项目的类型性能热点。

8 分钟阅读
TypeScript TypeScript高级编程 类型实例化
typescript

《TypeScript高级编程》2.3 类型级数据结构与图灵完备

本节把条件类型与 infer 拼成类型级的数据结构与算法:以元组模拟数组与单链表、用元组长度实现类型级加减乘除与比较、用对象类型充当字典并按键值反查键名,再借逆变合并把联合转成元组。由此说明 TypeScript 类型系统为何是图灵完备的,以及这种能力在编译时间、错误信息与可维护性上的真实代价。读完本节,你能判断一个类型工具该手写还是该改用代码生成。

8 分钟阅读
TypeScript TypeScript高级编程 类型级编程
typescript

《TypeScript高级编程》2.2 infer 与递归

本节讲解 infer 在条件类型中做模式匹配与类型提取的规则:推断位置受协变与逆变影响的结果、同一推断变量出现在多处时的合并规则,以及在模板字面量类型中捕获子串、解析路由参数的技巧。随后引入递归条件类型,讲清递减输入与显式终止分支这两条铁律,并用累积参数避免结果反转。读完本节,你能用 infer 与递归实现真实的类型级提取工具,并知道如何规避深度超限报错。

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

《TypeScript高级编程》2.1 条件类型与分发

本节从条件类型的语法与可赋值性判定讲起,重点剖析「分发」这一最反直觉的行为:为什么裸类型参数会让联合类型被逐成员展开、如何用元组包裹关闭分发、never 在分发中的特殊性,以及它与映射类型、键重映射组合后如何实现按键值类型筛选字段。读完本节,你能读懂主流工具库的类型定义,并写出行为可预测、不会误分发的条件类型工具。

9 分钟阅读
TypeScript TypeScript高级编程 条件类型
typescript

《TypeScript高级编程》1.3 类型推导算法与上下文类型

本节讲清编译器在没有标注时如何猜出类型。内容涵盖自下而上推断与自上而下上下文类型这两条相反的流水线、字面量拓宽与 as const 的收窄作用、数组最佳公共类型的合并规则、泛型推断候选的收集与合并顺序、回调参数获得类型的条件,以及隐式 any 与循环推导这两类失败的诊断路径。读完你能判断某处该补显式标注还是该改结构,并解释常见推导结果为何与直觉不同。

8 分钟阅读
TypeScript TypeScript高级编程 类型推导
typescript

《TypeScript高级编程》1.2 类型擦除与运行时边界

本节把 tsc 的编译产物摊开看,讲清类型擦除删掉了什么、留下了什么。内容涵盖擦除的基本规则与产物对照、泛型与 instanceof 为何在运行时不可用、as 断言为何不是校验,以及 enum、namespace、类体、装饰器元数据这些必须生成真实代码的例外。读完你能列出运行时可用的替代手段,用类型谓词与判别联合把校验集中在系统边界,并判断 private、readonly 的真实效力。

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

《TypeScript高级编程》1.1 结构化类型与兼容性判定

本节把「类型 A 能否赋给类型 B」从直觉变成可复述的规则:先对照名义类型理解结构化类型为何只看成员结构,再拆解可赋值性的判定顺序,涵盖成员存在性、递归兼容、参数逆变与返回值协变,并解释数组协变的历史包袱、any 与 unknown 的特殊行为、private 成员如何让比较退化为名义类型,以及结构化兼容放过 bug 时的品牌类型兜底做法。读完你能独立解读 not assignable 报错。

9 分钟阅读
TypeScript TypeScript高级编程 结构化类型