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编程实战》18.3 发布后验证与回滚

本节把「部署完成」之后的那段时间当成发布本身的一部分:先给出冒烟、合成监控、真实用户指标、业务指标四层验证的具体做法,讲清指标为什么必须带版本标签才能对比新旧;再把回滚拆成镜像、流量、开关、配置、数据五类对象,给出各自的耗时与代价,并说明数据库不可回滚时该向前修复还是恢复备份;最后落到自动回退门禁与无责复盘。读完后你能给发布配上一套可验证、可止损的收尾流程。

10 分钟阅读
TypeScript TypeScript编程实战 发布后验证与回滚
typescript

《TypeScript编程实战》18.2 数据库迁移与灰度发布

本节讲清「代码能随时回滚、数据库不能」这个不对称性带来的全部约束:先用 expand-contract 把破坏性结构变更拆成向前兼容的多步,再给出大表回填的分批限速写法与迁移在流水线中的正确位置,最后系统对比蓝绿、金丝雀、滚动与功能开关四种灰度形态,并给出灰度期的指标判定与契约兼容要求。读完后你能设计一条可灰度、可回滚的发布路径。

10 分钟阅读
TypeScript TypeScript编程实战 数据库迁移与灰度发布
typescript

《TypeScript编程实战》18.1 Docker 与 CI/CD 流水线

本节把 TypeScript 服务从「本地能跑」推进到「可重复交付」:先用多阶段 Dockerfile 拆开依赖层、构建层与运行层,讲清镜像为何能从 1.2GB 降到 180MB;再给出分层清晰的 CI/CD 流水线,覆盖类型检查、测试、镜像构建、签名与制品晋级;最后落到缓存、非 root 运行、健康检查与供应链加固这些易踩的坑。读完后你能独立写出从提交到上线的自动化流水线。

8 分钟阅读
TypeScript TypeScript编程实战 Docker 与 CI/CD
typescript

《TypeScript编程实战》17.3 依赖供应链与应用安全加固

本节把视角从运行时可见性转向交付安全:先建立依赖供应链的威胁模型,再讲清 lockfile 与可复现安装的纪律、npm audit 与 OSV 扫描的差异、自动化升级与版本锁定策略。随后落到应用侧加固,涵盖用 Zod 在边界做运行时校验、安全响应头与 CSP、密钥管理与最小权限,最后给出 SBOM 与构建证明的落地方式。

9 分钟阅读
TypeScript TypeScript编程实战 供应链安全
typescript

《TypeScript编程实战》17.2 指标与告警

本节讲透指标与告警这条链路:从 Counter、Gauge、Histogram 三种仪器类型的语义差异,到用 OpenTelemetry SDK 在 Node.js 里暴露 /metrics 端点,再到命名规范与标签基数控制。你将学会用 RED 与黄金信号设计仪表盘,写出可执行、低噪音的告警规则,并用 SLO 与燃烧率把告警从「阈值告警」升级为「错误预算告警」。

9 分钟阅读
TypeScript TypeScript编程实战 Prometheus
typescript

《TypeScript编程实战》17.1 OpenTelemetry 追踪

本节从日志排障的局限出发,讲清 OpenTelemetry 的 Trace、Span 与 Context 数据模型,并给出 Node.js 侧可直接运行的 SDK 初始化、自动插桩与采样配置。你将学会在 Fastify 中间件里手工埋点、跨服务传播 traceparent、把 trace_id 写进结构化日志,并用语义约定统一 span 属性命名,避开采样过高与上下文丢失等常见坑。

9 分钟阅读
TypeScript TypeScript编程实战 OpenTelemetry
typescript

《TypeScript编程实战》16.3 契约版本演进与兼容

本节讨论契约改动之后的事:先给出破坏性变更的判定清单,把「加字段安全、改语义危险」这类直觉变成可检查的规则;再对比 URL、Header、内容协商三种版本化策略的代价;然后用 expand-contract 三步法演示字段改名如何做到不打断旧客户端;最后讲弃用头、下线指标与消费者驱动契约测试的落地方式。

10 分钟阅读
TypeScript TypeScript编程实战 契约版本化
typescript

《TypeScript编程实战》16.1 tRPC 端到端类型安全

本节从前后端分离项目里最常见的契约漂移讲起,说明为什么手写接口类型守不住边界。随后完整走一遍 tRPC 的工程落地:初始化 router、用 context 传递请求级依赖、用 Zod 校验输入、用 middleware 做鉴权与日志,再把类型一路带到 React 客户端。最后给出 tRPC 的适用边界与常见坑,帮你在单体全栈与开放 API 之间做出有依据的选型。

9 分钟阅读
TypeScript TypeScript编程实战 tRPC
typescript

《TypeScript编程实战》15.3 构建性能诊断与包体积治理

构建变慢和包变大常常是同一批依赖的两面。本节先给出构建耗时的定位方法,用 --debug 与插件计时找出慢在哪个环节;再做包体积的可视化分析与体积预算;最后落到四条治理手段——依赖替换、按需引入、压缩器与 target 取舍、长期缓存下的 chunk 命名,并给出把体积门禁写进 CI 的可执行脚本。

7 分钟阅读
TypeScript TypeScript编程实战 构建性能
typescript

《TypeScript编程实战》15.2 代码分割与 tree-shaking

首屏体积的敌人不是代码总量,而是「用不到的代码被提前加载」。本节先讲动态 import() 在类型层面如何标注模块边界,再拆解 tree-shaking 真正生效的三个前提——ESM 静态语法、sideEffects 声明、压缩器的死代码消除;最后给出 manualChunks 分包策略与 React.lazy、路由懒加载的落地写法,并列出五类让优化静默失效的场景。

8 分钟阅读
TypeScript TypeScript编程实战 代码分割
typescript

《TypeScript编程实战》14.3 分页、无限滚动与预取

本节把查询层推进到列表场景:先区分页码分页与游标分页的适用场景,再讲清 useInfiniteQuery 的 InfiniteData 类型形状、pageParam 与 getNextPageParam 的类型对齐,以及用 select 扁平化 pages。接着给出基于 IntersectionObserver 的无限滚动封装与 prefetchQuery 预取时机,并说明预取与缓存失效的配合。

8 分钟阅读
TypeScript TypeScript编程实战 无限滚动
typescript

《TypeScript编程实战》14.2 乐观更新与缓存失效

本节讲清写操作之后缓存该怎么改:先用 useMutation 的四个类型参数把变量、返回值、错误与上下文串起来,再实现「先改界面、失败回滚」的乐观更新三段式,最后区分 setQueryData 精确写入与 invalidateQueries 前缀失效各自的适用场景。你会掌握 onMutate 快照的类型写法、cancelQueries 防竞态,以及失效范围过宽的常见坑。

9 分钟阅读
TypeScript TypeScript编程实战 乐观更新
typescript

《TypeScript编程实战》14.1 TanStack Query 类型推导

本节先厘清服务端状态与客户端状态的分工,再拆解 TanStack Query 如何把类型从 queryKey 推导到 data。你会掌握 useQuery 的四个类型参数、key factory 的收敛写法、select 收窄、queryOptions 复用与自定义 Hook 泛型封装,以及 error 类型必须显式声明等高频坑,最终写出一层端到端有类型的查询代码。

8 分钟阅读
TypeScript TypeScript编程实战 TanStack Query
typescript

《TypeScript编程实战》13.3 复杂表单与动态字段

字段能增删、能嵌套、能按另一个字段的值条件出现,是表单真正开始变复杂的三个信号。本节用 useFieldArray 处理动态行,讲清 key 为什么必须用 RHF 生成的 id 而非数组下标;再用判别联合 schema 表达条件字段、用 superRefine 做跨行校验。同时实测数组级错误与行级错误在 errors 树上的不同落点,并给出分步表单的 trigger 校验与草稿持久化方案。

10 分钟阅读
TypeScript TypeScript编程实战 动态字段
typescript

《TypeScript编程实战》13.2 表单类型推导与错误映射

Zod 的 transform 与 default 会让 schema 的输入与输出变成两副面孔,表单类型也跟着分叉。本节用实测结果讲清 z.input、z.output 与 z.infer 的关系,给出 useForm 三段泛型的正确写法,并解释写错时编译器报出的 Resolver 不兼容信息。随后把 ZodError 映射成 RHF 的 FieldErrors,覆盖嵌套路径与服务端错误回填。

10 分钟阅读
TypeScript TypeScript编程实战 类型推导
typescript

《TypeScript编程实战》13.1 React Hook Form + Zod

受控表单在大表单下会因每次按键重渲染整棵树而变慢。本节从这一性能问题切入,讲清 React Hook Form 的非受控与订阅式模型为何更快,再用 zodResolver 把 Zod schema 变成表单唯一的规则与类型来源,让字段名、错误结构与提交类型自动对齐。你会掌握 register、handleSubmit、formState 的用法与 Controller 的接入时机。

10 分钟阅读
TypeScript TypeScript编程实战 React Hook Form
typescript

《TypeScript编程实战》12.3 SSR·ISR 数据流类型

类型能描述数据的形状,却描述不了数据的新鲜度,这正是 SSR 与 ISR 最容易出事的地方。本节从三种渲染模式的数据流差异讲起,拆解 fetch 的缓存语义与 next 扩展类型、返回值收窄与 notFound 的 never、ISR 的 stale-while-revalidate 窗口、流式渲染与 Suspense 的边界,以及服务端与客户端缓存的新鲜度对齐。

10 分钟阅读
TypeScript TypeScript编程实战 SSR