posts

《TypeScript编程实战》 · 全书目录与章节索引(55 节)

《TypeScript编程实战》全 55 节,是一本 TypeScript 工程落地手册:从工程脚手架、严格模式分层与代码门禁讲起,依次覆盖错误处理与日志、测试体系、Node.js 服务端、数据访问层、缓存、消息队列与实时通信,再转入 React / Vue / Next.js 前端类型实践、构建产物治理,最后落在 API 契约、可观测性、安全加固与部署发布上。本页给出全书分章目录。

《TypeScript编程实战》全 55 节,是一本 TypeScript 工程落地手册:从脚手架与门禁讲到后端、前端、全栈契约与交付链路。

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

全书概览

项目内容
书稿《TypeScript编程实战》
章节数55 节
领域TypeScript 工程实战
阅读方式从「目录」篇进入按顺序通读,或按章节表跳读
上级专题书稿专题

全书目录

前置:序、前言与目录

节文章核心内容
—《TypeScript编程实战》目录《TypeScript编程实战》全书导航页:说明本书定位、读者画像与前置知识,给出完整通读、主线速读…

第 1 章 现代 TS 工程脚手架

节文章核心内容
1.11.1 从零搭建(pnpm / tsx / tsup)本节从空目录开始搭起可复现的 TypeScript 工程脚手架:先用 Corepack 锁定 pnp…
1.21.2 严格模式与 tsconfig 分层本节把 tsconfig.json 讲成可维护的配置:先解释 strict 总开关包含哪几项检查,再…
1.31.3 代码规范与提交门禁(ESLint / Biome / husky)本节把代码规范从口头约定变成不可绕过的自动化门禁:先对比 ESLint 加 Prettier 与 B…

第 2 章 类型安全的开发工作流

节文章核心内容
2.12.1 路径别名与 monorepo 结构本节讲清路径别名与 monorepo 结构。先用相对路径失控的场景引出 paths 与 baseUr…
2.22.2 环境变量与配置的类型化本节把环境变量与配置纳入类型系统。先讲清 process.env 的真实类型为什么是 string …
2.32.3 调试与 source map本节解决「运行时报错的行号对不上源码」这一痛点。先讲清 source map 是什么、由哪些字段组成…

第 3 章 错误处理与日志

节文章核心内容
3.13.1 Result/Either 与类型化错误本节从 throw 的类型黑洞讲起,说明 TypeScript 的函数签名为何无法表达失败路径。随后…
3.23.2 全局错误边界与未捕获异常本节讲 Result 覆盖不到的失败:Node 进程级的 uncaughtException 与 u…
3.33.3 结构化日志与脱敏本节说明 console.log 为什么在生产环境不可用,并给出结构化日志的字段约定。随后用 pin…

第 4 章 测试体系

节文章核心内容
4.14.1 Vitest 单元测试本节把单元测试落到 Vitest 上:先说明现代 TypeScript 项目为何更倾向它,再给出安装…
4.24.2 集成测试与 Testcontainers本节解决「单测全绿、上线照样炸」的问题:先讲清 mock 越多失真的原因,再引入 Testconta…
4.34.3 类型测试与覆盖率门禁本节补上测试体系的最后两个维度:类型测试用 vitest 的 typecheck 模式与 expec…

第 5 章 Node.js 服务端基础

节文章核心内容
5.15.1 HTTP 服务与路由(Fastify / Hono)本节从 Node 原生 http 模块的类型缺口讲起,对比 Fastify 与 Hono 两套框架的…
5.25.2 中间件与请求上下文本节讲解 HTTP 服务的横切关注点如何组织:从洋葱模型与 Fastify hooks 的执行顺序,…
5.35.3 优雅关闭与健康检查本节讲解服务进程如何正确地「活着」与「死去」:从 SIGTERM 信号处理、连接排空与资源释放的关闭…

第 6 章 NestJS 模块化架构

节文章核心内容
6.16.1 模块、提供者与依赖注入本节讲解 NestJS 的模块、提供者与依赖注入三件套如何协作:用 @Injectable 与构造函…
6.26.2 管道、守卫与拦截器本节讲解 NestJS 请求处理流水线里的三类横切组件:管道负责校验与转换入参,守卫决定请求能否放行…
6.36.3 配置与生命周期本节讲解 NestJS 应用的两件「非业务」大事:配置如何按环境分层、用 schema 在启动时校验…

第 7 章 数据访问层

节文章核心内容
7.17.1 Prisma schema 与类型生成本节把 Prisma 当作一条从数据库结构到 TypeScript 类型的单向流水线:写出第一个 s…
7.27.2 Drizzle 的 SQL 式类型推导本节换一条与 Prisma 相反的路线:用 TypeScript 文件本身描述表结构,让类型从查询语…
7.37.3 迁移、事务与连接池本节收束数据访问层剩下的三个难题:表结构怎么改才不锁库、并发写入怎么写才不留半成品、连接池该配多大才…

第 8 章 缓存与性能

节文章核心内容
8.18.1 缓存层次与键设计本节讲清缓存分层的工程取舍与缓存键的设计规范。先给出浏览器、CDN、进程内、Redis、数据库五层缓…
8.28.2 Redis 类型安全封装本节把裸 Redis 客户端那层 string 边界升级成编译器可检查的类型边界。先拆解键空间声明、…
8.38.3 穿透·击穿·雪崩防护本节系统拆解缓存的三种失效模式并给出可直接落地的 TypeScript 代码。先对比穿透、击穿、雪崩…

第 9 章 消息与后台任务

节文章核心内容
9.19.1 BullMQ 队列模型与 payload 泛型本节从「为什么要把工作丢进队列」讲起,拆解 BullMQ 的 Queue、Worker、Job 三个…
9.29.2 重试、幂等与死信投递成功只是开始,任务失败之后才是真正的工程量。本节先区分可重试与不可重试的失败,讲清 BullMQ…
9.39.3 定时任务与并发限流定时任务看似最简单,却最容易在多实例部署下出错。本节先对比系统 crontab、node-cron …

第 10 章 实时通信

节文章核心内容
10.110.1 WebSocket 消息协议判别联合WebSocket 是长连接,一条通道上会流动几十种语义完全不同的消息,而 JSON.parse 返…
10.210.2 SSE 与流式响应当服务端只需单向推送时,WebSocket 是过重的选择。本节讲透 SSE 的文本帧格式、id 与 …
10.310.3 心跳、重连与广播长连接上线前还有三块拼图没补齐:它会静默假死、断了要能自动恢复、单实例的订阅表在多副本部署下会失效。…

第 11 章 React 类型安全

节文章核心内容
11.111.1 组件 props 与泛型组件本节把 React 组件的 props 从随手写的对象类型升级成一份可演进的接口契约:先讲 chil…
11.211.2 Hooks 类型与自定义 Hook本节沿着 useState、useReducer、useRef、useEffect 逐个拆解 Rea…
11.311.3 Context 与状态管理(Zustand / RTK)本节解决状态离开单个组件之后的类型问题:Context 的默认值该放什么、为什么假默认值比 null…

第 12 章 Vue 与 Next.js 类型实践

节文章核心内容
12.112.1 Vue 3 组合式 API 类型Vue 3 的类型体验与 Vue 2 截然不同:ref 与 reactive 的自动解包、编译宏、d…
12.212.2 Next.js App Router 类型(Server Actions / Route Handlers)Next.js App Router 用一份 TypeScript 同时描述服务端与客户端两种运行环…
12.312.3 SSR·ISR 数据流类型类型能描述数据的形状,却描述不了数据的新鲜度,这正是 SSR 与 ISR 最容易出事的地方。本节从三…

第 13 章 表单与校验

节文章核心内容
13.113.1 React Hook Form + Zod受控表单在大表单下会因每次按键重渲染整棵树而变慢。本节从这一性能问题切入,讲清 React Hook…
13.213.2 表单类型推导与错误映射Zod 的 transform 与 default 会让 schema 的输入与输出变成两副面孔,表…
13.313.3 复杂表单与动态字段字段能增删、能嵌套、能按另一个字段的值条件出现,是表单真正开始变复杂的三个信号。本节用 useFie…

第 14 章 数据获取与状态同步

节文章核心内容
14.114.1 TanStack Query 类型推导本节先厘清服务端状态与客户端状态的分工,再拆解 TanStack Query 如何把类型从 quer…
14.214.2 乐观更新与缓存失效本节讲清写操作之后缓存该怎么改:先用 useMutation 的四个类型参数把变量、返回值、错误与上…
14.314.3 分页、无限滚动与预取本节把查询层推进到列表场景:先区分页码分页与游标分页的适用场景,再讲清 useInfiniteQue…

第 15 章 前端构建与产物

节文章核心内容
15.115.1 Vite 与 TS 集成Vite 已成为 TS 前端项目的默认构建工具,但它对 TypeScript 的态度常被误解。本节先…
15.215.2 代码分割与 tree-shaking首屏体积的敌人不是代码总量,而是「用不到的代码被提前加载」。本节先讲动态 import() 在类型层…
15.315.3 构建性能诊断与包体积治理构建变慢和包变大常常是同一批依赖的两面。本节先给出构建耗时的定位方法,用 –debug 与插件计时…

第 16 章 API 契约与端到端类型

节文章核心内容
16.116.1 tRPC 端到端类型安全本节从前后端分离项目里最常见的契约漂移讲起,说明为什么手写接口类型守不住边界。随后完整走一遍 tRP…
16.216.2 OpenAPI / GraphQL Codegen本节讲清「schema 先行」这条契约路线的完整闭环:如何从 TypeScript 服务端实现自动导…
16.316.3 契约版本演进与兼容本节讨论契约改动之后的事:先给出破坏性变更的判定清单,把「加字段安全、改语义危险」这类直觉变成可检查…

第 17 章 可观测性与安全

节文章核心内容
17.117.1 OpenTelemetry 追踪本节从日志排障的局限出发,讲清 OpenTelemetry 的 Trace、Span 与 Conte…
17.217.2 指标与告警本节讲透指标与告警这条链路:从 Counter、Gauge、Histogram 三种仪器类型的语义差…
17.317.3 依赖供应链与应用安全加固本节把视角从运行时可见性转向交付安全:先建立依赖供应链的威胁模型,再讲清 lockfile 与可复现…

第 18 章 部署与发布

节文章核心内容
18.118.1 Docker 与 CI/CD 流水线本节把 TypeScript 服务从「本地能跑」推进到「可重复交付」:先用多阶段 Dockerfil…
18.218.2 数据库迁移与灰度发布本节讲清「代码能随时回滚、数据库不能」这个不对称性带来的全部约束:先用 expand-contrac…
18.318.3 发布后验证与回滚本节把「部署完成」之后的那段时间当成发布本身的一部分:先给出冒烟、合成监控、真实用户指标、业务指标四…
全部文章 Game Golang Saas Rust 游戏开发 客户端开发 GameDev TypeScript Lua Products
typescript

《TypeScript编程实战》11.3 Context 与状态管理(Zustand / RTK)

本节解决状态离开单个组件之后的类型问题:Context 的默认值该放什么、为什么假默认值比 null 更危险、如何用自定义 Hook 把判空收窄一次。再进入 Zustand 与 Redux Toolkit,讲清 create 的柯里化签名、selector 与重渲染的关系、slices 与中间件的类型标注,以及 RTK 三件套的由来。

11 分钟阅读
TypeScript TypeScript编程实战 React Context
typescript

《TypeScript编程实战》11.2 Hooks 类型与自定义 Hook

本节沿着 useState、useReducer、useRef、useEffect 逐个拆解 React Hooks 的类型推导边界:状态为何被 widen 成 string、ref 的三种形态与 React 19 的变化、effect 回调的返回类型限制。后半部分讲自定义 Hook 的返回值形状与泛型 Hook 的运行时校验,读完能写出类型可推导、对调用方友好的 Hook。

10 分钟阅读
TypeScript TypeScript编程实战 React Hooks 类型
typescript

《TypeScript编程实战》11.1 组件 props 与泛型组件

本节把 React 组件的 props 从随手写的对象类型升级成一份可演进的接口契约:先讲 children 的三种类型与取舍,再讲可选属性在严格模式下的行为、事件处理器的泛型签名,最后进入泛型组件的完整写法,让列表、表格、选择器这类复用组件在适配任意数据类型时仍然保留推导。文中给出真实编译错误与修复路径,读完能设计出不依赖 any 的组件 API。

9 分钟阅读
TypeScript TypeScript编程实战 React 组件类型
typescript

《TypeScript编程实战》10.3 心跳、重连与广播

长连接上线前还有三块拼图没补齐:它会静默假死、断了要能自动恢复、单实例的订阅表在多副本部署下会失效。本节先讲清心跳为什么必须由应用层承担、ping/pong 与业务保活如何配合、指数退避加抖动如何避免重连风暴,再讲断线后的状态补偿与消息幂等,最后用 Redis 发布订阅把广播从单机扩展到集群,并给出背压、慢消费者与可观测性的落地方案。

9 分钟阅读
TypeScript TypeScript编程实战 心跳
typescript

《TypeScript编程实战》10.2 SSE 与流式响应

当服务端只需单向推送时,WebSocket 是过重的选择。本节讲透 SSE 的文本帧格式、id 与 retry 字段的作用、服务端如何用 ReadableStream 输出事件流、客户端 EventSource 的自动重连为何常常失效,以及需要 POST 与自定义请求头时如何改用 fetch 读取。还给出事件契约的类型化写法与流式 JSON 增量解析,并指出代理缓冲与超时这几个必踩的坑。

8 分钟阅读
TypeScript TypeScript编程实战 SSE
typescript

《TypeScript编程实战》10.1 WebSocket 消息协议判别联合

WebSocket 是长连接,一条通道上会流动几十种语义完全不同的消息,而 JSON.parse 返回的 any 会让类型安全在最需要它的地方失效。本节用判别联合为消息族建模:挑选有限且显式的字面量判别键、让 switch 自动收窄、用 never 做穷尽检查、在 JSON 边界用 Zod 做运行时校验,并给出前后端共享协议包与版本协商的落地方式。

7 分钟阅读
TypeScript TypeScript编程实战 WebSocket
typescript

《TypeScript编程实战》9.3 定时任务与并发限流

定时任务看似最简单,却最容易在多实例部署下出错。本节先对比系统 crontab、node-cron 与 BullMQ Job Scheduler 三条路径,解释前两者为何在容器多副本下会重复执行;再用 Job Scheduler 与确定性 jobId 解决重复投递;最后讲透并发控制的两层含义——单实例的 concurrency 与跨实例的全局闸,以及 limiter 如何把配额变成硬限制。

8 分钟阅读
TypeScript TypeScript编程实战 定时任务
typescript

《TypeScript编程实战》9.2 重试、幂等与死信

投递成功只是开始,任务失败之后才是真正的工程量。本节先区分可重试与不可重试的失败,讲清 BullMQ 的 attempts、backoff 与 UnrecoverableError 三件套;再解释为什么队列只能做到至少一次投递,从而引出幂等键的设计与两种落地方式;最后给出死信队列的搬移、告警与重放闭环。读完本节,你能让一个后台任务系统在失败面前保持可控,而不是无限重试或静默丢单。

7 分钟阅读
TypeScript TypeScript编程实战 幂等
typescript

《TypeScript编程实战》9.1 BullMQ 队列模型与 payload 泛型

本节从「为什么要把工作丢进队列」讲起,拆解 BullMQ 的 Queue、Worker、Job 三个核心对象及其在 Redis 中的存储结构,再重点解决一个工程痛点:如何用泛型把 payload 类型从生产者贯穿到消费者。你会学到 Queue 的类型参数推导、job name 的字面量联合、判别联合注册表的写法,以及 Date 序列化等常见坑。读完能把队列调用从 any 变成端到端可检查。

7 分钟阅读
TypeScript TypeScript编程实战 BullMQ
typescript

《TypeScript编程实战》8.3 穿透·击穿·雪崩防护

本节系统拆解缓存的三种失效模式并给出可直接落地的 TypeScript 代码。先对比穿透、击穿、雪崩的成因与线上表现,再分别用布隆过滤器与空值缓存挡穿透、用进程内单飞配合分布式锁与逻辑过期挡击穿、用 TTL 抖动、多级缓存与熔断降级挡雪崩,最后把三者组合成一条抗压读路径,并给出锁超时、哨兵值污染、抖动区间设置等常见坑的排查方法。

7 分钟阅读
TypeScript TypeScript编程实战 缓存雪崩
typescript

《TypeScript编程实战》8.2 Redis 类型安全封装

本节把裸 Redis 客户端那层 string 边界升级成编译器可检查的类型边界。先拆解键空间声明、codec 与客户端三层封装的职责,再用 TypeScript 泛型与 as const 推导实现 defineCache、类型化 get/set/mget/del 与 remember 缓存旁路助手,并用 Zod codec 在反序列化阶段拦截结构漂移,最后给出管道批量与常见类型漏洞的修复方案。

6 分钟阅读
TypeScript TypeScript编程实战 Redis 封装
typescript

《TypeScript编程实战》8.1 缓存层次与键设计

本节讲清缓存分层的工程取舍与缓存键的设计规范。先给出浏览器、CDN、进程内、Redis、数据库五层缓存各自的职责表与失效半径对比,再深入缓存键的三要素——命名空间、版本号与粒度,并用 TypeScript 写出类型安全、可版本化的键构造器与稳定序列化函数,最后列出大小写、浮点精度、对象键顺序等常见键冲突坑与排查手段,读完能独立设计一套不互相污染的键空间。

8 分钟阅读
TypeScript TypeScript编程实战 缓存分层
typescript

《TypeScript编程实战》7.3 迁移、事务与连接池

本节收束数据访问层剩下的三个难题:表结构怎么改才不锁库、并发写入怎么写才不留半成品、连接池该配多大才不会把数据库压垮。先讲 expand-contract 迁移模式与加列改列的真实锁行为,再讲交互式事务、隔离级别、死锁重试与 outbox,最后给出连接数估算公式、PgBouncer 与预编译语句的冲突,以及慢查询与连接指标的观测手段。

11 分钟阅读
TypeScript TypeScript编程实战 数据库迁移与连接池
typescript

《TypeScript编程实战》7.2 Drizzle 的 SQL 式类型推导

本节换一条与 Prisma 相反的路线:用 TypeScript 文件本身描述表结构,让类型从查询语句推导出来。先安装 drizzle-orm 与 drizzle-kit,用 pgTable 定义表、列、枚举与索引,再讲清 $inferSelect 与 $inferInsert 的差别,随后逐个演示 select、join、where 与关系查询 API 的类型结果,最后给出迁移命令与选型建议。

9 分钟阅读
TypeScript TypeScript编程实战 Drizzle ORM
typescript

《TypeScript编程实战》7.1 Prisma schema 与类型生成

本节把 Prisma 当作一条从数据库结构到 TypeScript 类型的单向流水线:写出第一个 schema.prisma,逐块拆解 generator、datasource 与 model 的字段类型与常用属性,观察 prisma generate 生成了什么,并说明 select、include 的返回类型如何推导。最后给出常见报错对照与 N+1 规避,读完你能独立设计可演进的数据模型。

9 分钟阅读
TypeScript TypeScript编程实战 Prisma schema
typescript

《TypeScript编程实战》6.3 配置与生命周期

本节讲解 NestJS 应用的两件「非业务」大事:配置如何按环境分层、用 schema 在启动时校验、并以类型安全的方式读取;生命周期钩子如何在模块与应用的启停节点执行初始化与清理,配合优雅关闭让进程在收到信号后体面退出。读完本节,你能让应用在配置错误时快速失败,也能保证关停时不丢连接、不漏任务。

7 分钟阅读
TypeScript TypeScript编程实战 配置管理
typescript

《TypeScript编程实战》6.2 管道、守卫与拦截器

本节讲解 NestJS 请求处理流水线里的三类横切组件:管道负责校验与转换入参,守卫决定请求能否放行,拦截器在方法前后织入日志、响应包装与超时控制。我们给出它们的执行顺序、手写实现与全局注册方式,并对比各自的适用边界。读完本节,你能把校验、鉴权与日志从控制器里抽干净,写出无重复样板的后端接口。

6 分钟阅读
TypeScript TypeScript编程实战 守卫
typescript

《TypeScript编程实战》6.1 模块、提供者与依赖注入

本节讲解 NestJS 的模块、提供者与依赖注入三件套如何协作:用 @Injectable 与构造函数声明依赖,用 @Module 划清边界,用自定义提供者与注入令牌替换实现,并处理循环依赖与作用域陷阱。读完本节,你能为真实后端项目设计出层次清晰、可测试、可替换的模块结构,也能看懂任意一个 NestJS 项目的装配图。

8 分钟阅读
TypeScript TypeScript编程实战 依赖注入
typescript

《TypeScript编程实战》5.3 优雅关闭与健康检查

本节讲解服务进程如何正确地「活着」与「死去」:从 SIGTERM 信号处理、连接排空与资源释放的关闭流程,到 liveness、readiness、startup 三类健康检查的语义差异与实现方式。你将学会为数据库、缓存等依赖编写带超时的探活,并把探针与容器、编排系统配置对齐,避免发布期间丢请求或误判重启。

8 分钟阅读
TypeScript TypeScript编程实战 优雅关闭