《TypeScript编程实战》全 55 节,是一本 TypeScript 工程落地手册:从脚手架与门禁讲到后端、前端、全栈契约与交付链路。
本页是《TypeScript编程实战》的全书目录:按章节顺序列出全部 55 节,点击标题直达正文。也可以从各节的「上一篇 / 下一篇」按顺序通读。
全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《TypeScript编程实战》 |
| 章节数 | 55 节 |
| 领域 | TypeScript 工程实战 |
| 阅读方式 | 从「目录」篇进入按顺序通读,或按章节表跳读 |
| 上级专题 | 书稿专题 |
全书目录
前置:序、前言与目录
| 节 | 文章 | 核心内容 |
|---|---|---|
| — | 《TypeScript编程实战》目录 | 《TypeScript编程实战》全书导航页:说明本书定位、读者画像与前置知识,给出完整通读、主线速读… |
第 1 章 现代 TS 工程脚手架
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 1.1 从零搭建(pnpm / tsx / tsup) | 本节从空目录开始搭起可复现的 TypeScript 工程脚手架:先用 Corepack 锁定 pnp… |
| 1.2 | 1.2 严格模式与 tsconfig 分层 | 本节把 tsconfig.json 讲成可维护的配置:先解释 strict 总开关包含哪几项检查,再… |
| 1.3 | 1.3 代码规范与提交门禁(ESLint / Biome / husky) | 本节把代码规范从口头约定变成不可绕过的自动化门禁:先对比 ESLint 加 Prettier 与 B… |
第 2 章 类型安全的开发工作流
| 节 | 文章 | 核心内容 |
|---|---|---|
| 2.1 | 2.1 路径别名与 monorepo 结构 | 本节讲清路径别名与 monorepo 结构。先用相对路径失控的场景引出 paths 与 baseUr… |
| 2.2 | 2.2 环境变量与配置的类型化 | 本节把环境变量与配置纳入类型系统。先讲清 process.env 的真实类型为什么是 string … |
| 2.3 | 2.3 调试与 source map | 本节解决「运行时报错的行号对不上源码」这一痛点。先讲清 source map 是什么、由哪些字段组成… |
第 3 章 错误处理与日志
| 节 | 文章 | 核心内容 |
|---|---|---|
| 3.1 | 3.1 Result/Either 与类型化错误 | 本节从 throw 的类型黑洞讲起,说明 TypeScript 的函数签名为何无法表达失败路径。随后… |
| 3.2 | 3.2 全局错误边界与未捕获异常 | 本节讲 Result 覆盖不到的失败:Node 进程级的 uncaughtException 与 u… |
| 3.3 | 3.3 结构化日志与脱敏 | 本节说明 console.log 为什么在生产环境不可用,并给出结构化日志的字段约定。随后用 pin… |
第 4 章 测试体系
| 节 | 文章 | 核心内容 |
|---|---|---|
| 4.1 | 4.1 Vitest 单元测试 | 本节把单元测试落到 Vitest 上:先说明现代 TypeScript 项目为何更倾向它,再给出安装… |
| 4.2 | 4.2 集成测试与 Testcontainers | 本节解决「单测全绿、上线照样炸」的问题:先讲清 mock 越多失真的原因,再引入 Testconta… |
| 4.3 | 4.3 类型测试与覆盖率门禁 | 本节补上测试体系的最后两个维度:类型测试用 vitest 的 typecheck 模式与 expec… |
第 5 章 Node.js 服务端基础
| 节 | 文章 | 核心内容 |
|---|---|---|
| 5.1 | 5.1 HTTP 服务与路由(Fastify / Hono) | 本节从 Node 原生 http 模块的类型缺口讲起,对比 Fastify 与 Hono 两套框架的… |
| 5.2 | 5.2 中间件与请求上下文 | 本节讲解 HTTP 服务的横切关注点如何组织:从洋葱模型与 Fastify hooks 的执行顺序,… |
| 5.3 | 5.3 优雅关闭与健康检查 | 本节讲解服务进程如何正确地「活着」与「死去」:从 SIGTERM 信号处理、连接排空与资源释放的关闭… |
第 6 章 NestJS 模块化架构
| 节 | 文章 | 核心内容 |
|---|---|---|
| 6.1 | 6.1 模块、提供者与依赖注入 | 本节讲解 NestJS 的模块、提供者与依赖注入三件套如何协作:用 @Injectable 与构造函… |
| 6.2 | 6.2 管道、守卫与拦截器 | 本节讲解 NestJS 请求处理流水线里的三类横切组件:管道负责校验与转换入参,守卫决定请求能否放行… |
| 6.3 | 6.3 配置与生命周期 | 本节讲解 NestJS 应用的两件「非业务」大事:配置如何按环境分层、用 schema 在启动时校验… |
第 7 章 数据访问层
| 节 | 文章 | 核心内容 |
|---|---|---|
| 7.1 | 7.1 Prisma schema 与类型生成 | 本节把 Prisma 当作一条从数据库结构到 TypeScript 类型的单向流水线:写出第一个 s… |
| 7.2 | 7.2 Drizzle 的 SQL 式类型推导 | 本节换一条与 Prisma 相反的路线:用 TypeScript 文件本身描述表结构,让类型从查询语… |
| 7.3 | 7.3 迁移、事务与连接池 | 本节收束数据访问层剩下的三个难题:表结构怎么改才不锁库、并发写入怎么写才不留半成品、连接池该配多大才… |
第 8 章 缓存与性能
| 节 | 文章 | 核心内容 |
|---|---|---|
| 8.1 | 8.1 缓存层次与键设计 | 本节讲清缓存分层的工程取舍与缓存键的设计规范。先给出浏览器、CDN、进程内、Redis、数据库五层缓… |
| 8.2 | 8.2 Redis 类型安全封装 | 本节把裸 Redis 客户端那层 string 边界升级成编译器可检查的类型边界。先拆解键空间声明、… |
| 8.3 | 8.3 穿透·击穿·雪崩防护 | 本节系统拆解缓存的三种失效模式并给出可直接落地的 TypeScript 代码。先对比穿透、击穿、雪崩… |
第 9 章 消息与后台任务
| 节 | 文章 | 核心内容 |
|---|---|---|
| 9.1 | 9.1 BullMQ 队列模型与 payload 泛型 | 本节从「为什么要把工作丢进队列」讲起,拆解 BullMQ 的 Queue、Worker、Job 三个… |
| 9.2 | 9.2 重试、幂等与死信 | 投递成功只是开始,任务失败之后才是真正的工程量。本节先区分可重试与不可重试的失败,讲清 BullMQ… |
| 9.3 | 9.3 定时任务与并发限流 | 定时任务看似最简单,却最容易在多实例部署下出错。本节先对比系统 crontab、node-cron … |
第 10 章 实时通信
| 节 | 文章 | 核心内容 |
|---|---|---|
| 10.1 | 10.1 WebSocket 消息协议判别联合 | WebSocket 是长连接,一条通道上会流动几十种语义完全不同的消息,而 JSON.parse 返… |
| 10.2 | 10.2 SSE 与流式响应 | 当服务端只需单向推送时,WebSocket 是过重的选择。本节讲透 SSE 的文本帧格式、id 与 … |
| 10.3 | 10.3 心跳、重连与广播 | 长连接上线前还有三块拼图没补齐:它会静默假死、断了要能自动恢复、单实例的订阅表在多副本部署下会失效。… |
第 11 章 React 类型安全
| 节 | 文章 | 核心内容 |
|---|---|---|
| 11.1 | 11.1 组件 props 与泛型组件 | 本节把 React 组件的 props 从随手写的对象类型升级成一份可演进的接口契约:先讲 chil… |
| 11.2 | 11.2 Hooks 类型与自定义 Hook | 本节沿着 useState、useReducer、useRef、useEffect 逐个拆解 Rea… |
| 11.3 | 11.3 Context 与状态管理(Zustand / RTK) | 本节解决状态离开单个组件之后的类型问题:Context 的默认值该放什么、为什么假默认值比 null… |
第 12 章 Vue 与 Next.js 类型实践
| 节 | 文章 | 核心内容 |
|---|---|---|
| 12.1 | 12.1 Vue 3 组合式 API 类型 | Vue 3 的类型体验与 Vue 2 截然不同:ref 与 reactive 的自动解包、编译宏、d… |
| 12.2 | 12.2 Next.js App Router 类型(Server Actions / Route Handlers) | Next.js App Router 用一份 TypeScript 同时描述服务端与客户端两种运行环… |
| 12.3 | 12.3 SSR·ISR 数据流类型 | 类型能描述数据的形状,却描述不了数据的新鲜度,这正是 SSR 与 ISR 最容易出事的地方。本节从三… |
第 13 章 表单与校验
| 节 | 文章 | 核心内容 |
|---|---|---|
| 13.1 | 13.1 React Hook Form + Zod | 受控表单在大表单下会因每次按键重渲染整棵树而变慢。本节从这一性能问题切入,讲清 React Hook… |
| 13.2 | 13.2 表单类型推导与错误映射 | Zod 的 transform 与 default 会让 schema 的输入与输出变成两副面孔,表… |
| 13.3 | 13.3 复杂表单与动态字段 | 字段能增删、能嵌套、能按另一个字段的值条件出现,是表单真正开始变复杂的三个信号。本节用 useFie… |
第 14 章 数据获取与状态同步
| 节 | 文章 | 核心内容 |
|---|---|---|
| 14.1 | 14.1 TanStack Query 类型推导 | 本节先厘清服务端状态与客户端状态的分工,再拆解 TanStack Query 如何把类型从 quer… |
| 14.2 | 14.2 乐观更新与缓存失效 | 本节讲清写操作之后缓存该怎么改:先用 useMutation 的四个类型参数把变量、返回值、错误与上… |
| 14.3 | 14.3 分页、无限滚动与预取 | 本节把查询层推进到列表场景:先区分页码分页与游标分页的适用场景,再讲清 useInfiniteQue… |
第 15 章 前端构建与产物
| 节 | 文章 | 核心内容 |
|---|---|---|
| 15.1 | 15.1 Vite 与 TS 集成 | Vite 已成为 TS 前端项目的默认构建工具,但它对 TypeScript 的态度常被误解。本节先… |
| 15.2 | 15.2 代码分割与 tree-shaking | 首屏体积的敌人不是代码总量,而是「用不到的代码被提前加载」。本节先讲动态 import() 在类型层… |
| 15.3 | 15.3 构建性能诊断与包体积治理 | 构建变慢和包变大常常是同一批依赖的两面。本节先给出构建耗时的定位方法,用 –debug 与插件计时… |
第 16 章 API 契约与端到端类型
| 节 | 文章 | 核心内容 |
|---|---|---|
| 16.1 | 16.1 tRPC 端到端类型安全 | 本节从前后端分离项目里最常见的契约漂移讲起,说明为什么手写接口类型守不住边界。随后完整走一遍 tRP… |
| 16.2 | 16.2 OpenAPI / GraphQL Codegen | 本节讲清「schema 先行」这条契约路线的完整闭环:如何从 TypeScript 服务端实现自动导… |
| 16.3 | 16.3 契约版本演进与兼容 | 本节讨论契约改动之后的事:先给出破坏性变更的判定清单,把「加字段安全、改语义危险」这类直觉变成可检查… |
第 17 章 可观测性与安全
| 节 | 文章 | 核心内容 |
|---|---|---|
| 17.1 | 17.1 OpenTelemetry 追踪 | 本节从日志排障的局限出发,讲清 OpenTelemetry 的 Trace、Span 与 Conte… |
| 17.2 | 17.2 指标与告警 | 本节讲透指标与告警这条链路:从 Counter、Gauge、Histogram 三种仪器类型的语义差… |
| 17.3 | 17.3 依赖供应链与应用安全加固 | 本节把视角从运行时可见性转向交付安全:先建立依赖供应链的威胁模型,再讲清 lockfile 与可复现… |
第 18 章 部署与发布
| 节 | 文章 | 核心内容 |
|---|---|---|
| 18.1 | 18.1 Docker 与 CI/CD 流水线 | 本节把 TypeScript 服务从「本地能跑」推进到「可重复交付」:先用多阶段 Dockerfil… |
| 18.2 | 18.2 数据库迁移与灰度发布 | 本节讲清「代码能随时回滚、数据库不能」这个不对称性带来的全部约束:先用 expand-contrac… |
| 18.3 | 18.3 发布后验证与回滚 | 本节把「部署完成」之后的那段时间当成发布本身的一部分:先给出冒烟、合成监控、真实用户指标、业务指标四… |