posts

《TypeScript编程入门》 · 全书目录与章节索引(61 节)

《TypeScript编程入门》全 61 节,是一套面向零基础的 TypeScript 完整教材:从语言诞生史与设计目标讲起,依次覆盖开发环境与工具链、基本类型系统、函数与泛型、接口与类、联合类型与类型收窄、高级类型与工具类型、模块与声明文件、运行时验证、错误处理与异步、测试与构建配置,最后用一个全栈项目与迁移方案串联全部知识点。本页给出全书分章目录。

《TypeScript编程入门》全 61 节,是一套面向零基础的 TypeScript 完整教材:从「为什么需要 TypeScript」讲到类型系统全貌,再落到工程实践与全栈项目。

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

全书概览

项目内容
书稿《TypeScript编程入门》
章节数61 节
领域TypeScript 语言基础与类型系统
阅读方式从「目录」篇进入按顺序通读,或按章节表跳读
上级专题书稿专题

全书目录

前置:序、前言与目录

节文章核心内容
—《TypeScript编程入门》序《TypeScript编程入门》的序。为什么在类型化 JavaScript 的今天依然值得系统学习 …
—《TypeScript编程入门》前言《TypeScript编程入门》前言:说明本书的目标读者与前置知识、五部分 18 章的结构分工、每节…
—《TypeScript编程入门》目录《TypeScript编程入门》全书导航页:说明本书定位、读者画像与前置知识、三条学习路径与各部分之…

第 1 章 认识 TypeScript

节文章核心内容
1.11.1 TypeScript 的诞生与设计目标本节从 2010 年前后大型 JavaScript 应用的维护困境讲起,梳理 TypeScript …
1.21.2 与 JavaScript 的关系(超集·类型擦除)本节回答一个新手最容易搞混的问题:TypeScript 和 JavaScript 到底是什么关系。我…
1.31.3 适用场景与生态版图本节把 TypeScript 放回真实的技术版图:先给出判断「何时收益最大、何时不划算」的几条标准,…

第 2 章 开发环境与工具链

节文章核心内容
2.12.1 安装 Node.js、TS 与编辑器配置本节从零搭建 TypeScript 开发环境:先讲清为什么必须先装 Node.js,再对比官方安装包…
2.22.2 tsc 与 tsconfig.json 初探本节拆开 TypeScript 编译器 tsc 与它的配置文件 tsconfig.json。先运行 …
2.32.3 第一个项目:从零到运行本节把零散知识组装成一个能跑起来的完整项目:命令行温度换算器。从创建目录、初始化 npm、安装 ty…

第 3 章 基本类型系统

节文章核心内容
3.13.1 原始类型与类型注解本节从 TypeScript 的原始类型讲起,逐一介绍 string、number、boolean、…
3.23.2 数组、元组与枚举本节讲透 TypeScript 里三种「复数形态」的类型:数组、元组与枚举。先对比 T[] 与 Ar…
3.33.3 any·unknown·never·void 与类型断言本节处理类型系统里的四个边界类型:any、unknown、never、void。先说明 any 为什…

第 4 章 函数与作用域

节文章核心内容
4.14.1 签名、可选参数与默认值函数是 TypeScript 程序的基本构件,而函数签名则决定了调用方能看到什么、编译器能替你检查什…
4.24.2 重载、this 类型与箭头函数一个函数在类型层面可以有多个签名,这就是函数重载。本节先讲清重载签名与实现签名的分工、匹配顺序以及常…
4.34.3 泛型函数入门泛型是 TypeScript 类型系统里最重要的复用机制。本节从「同一段逻辑要处理多种类型」这个朴素…

第 5 章 接口与类型别名

节文章核心内容
5.15.1 interface 定义对象结构本节从「如何描述一个对象长什么样」这个问题出发,系统讲解 interface 的定义方式与核心能力:…
5.25.2 type 别名、联合与交叉本节讲解 type 别名的定义方式与它相对 interface 的独有能力:给联合类型、交叉类型、元…
5.35.3 结构化类型与两者取舍本节回答两个贯穿全章的问题:为什么 TypeScript 只比较类型结构、不比较类型名字,以及 in…

第 6 章 类与面向对象

节文章核心内容
6.16.1 类、访问修饰符与参数属性本节讲解 TypeScript 的类相比 JavaScript 多出了什么:访问修饰符如何约束成员的…
6.26.2 继承、抽象类与多态本节讲解 TypeScript 中类的继承与多态:如何用 extends 与 super 复用父类行…
6.36.3 接口实现与 mixin本节讲解 TypeScript 中类与接口的两条连接方式:用 implements 让一个类同时承诺…

第 7 章 联合类型与类型收窄

节文章核心内容
7.17.1 联合类型与字面量类型本节先讲联合类型,说明如何用「A | B」表达取值可能是若干形态之一,再引入字面量类型,把具体的字符…
7.27.2 判别联合(Discriminated Unions)本节讲解判别联合,也就是给联合的每个成员加一个共同的判别字段,让编译器能顺着这个字段自动区分当前处于…
7.37.3 类型守卫与控制流分析本节讲解当数据结构本身没有判别字段时,如何通过运行期检查把联合类型收窄到具体成员。内容涵盖 type…

第 8 章 泛型进阶

节文章核心内容
8.18.1 泛型约束(extends)本节承接泛型函数入门,讲清为什么裸泛型在函数体里几乎什么都做不了,以及 extends 关键字如何把…
8.28.2 泛型默认值与类型推断本节讲清泛型默认值的语法、求值顺序,以及默认值必须满足约束这条硬规则。随后系统梳理类型推断的四个来源…
8.38.3 泛型在接口·类·函数中的协同本节把泛型从函数扩展到接口与类,讲清三者各自声明类型参数的位置与作用域,解释为什么静态成员不能用类的…

第 9 章 高级类型

节文章核心内容
9.19.1 keyof·typeof 与索引访问类型本节讲解 TypeScript 类型编程的三块基石:用 keyof 取出对象类型的全部键名,用 ty…
9.29.2 映射类型与键重映射(as)本节讲解映射类型:如何用 [K in keyof T] 遍历一个类型的所有键并批量生成新类型,如何用…
9.39.3 条件类型与 infer本节讲解类型运算的最后一块拼图:条件类型 T extends U ? X : Y 如何充当类型层面的…

第 10 章 类型体操与工具类型

节文章核心内容
10.110.1 内置工具类型全解本节把 TypeScript 标准库里的内置工具类型逐个拆开:从对象修饰的 Partial、Requ…
10.210.2 模板字面量类型本节讲解模板字面量类型如何把字符串拼接搬进类型系统:用反引号加 ${} 构造字面量模式,与联合类型组…
10.310.3 递归类型与类型性能治理本节讲类型层面的最后一块硬骨头:递归类型如何用「自我引用加终止条件」描述 JSON、树与深层修饰;编…

第 11 章 模块与包管理

节文章核心内容
11.111.1 ES 模块与模块解析本节从模块化的历史讲起,说明为什么全局脚本会互相污染、ES 模块如何用显式的 export 与 im…
11.211.2 ESM/CJS 互操作与 moduleResolution现实项目里 ES 模块与 CommonJS 长期并存,本节讲清两者如何互相调用。先看 package…
11.311.3 npm 包、类型声明与 exports本节从使用者视角切换到包作者视角,讲清一个 npm 包如何被 TypeScript 正确识别。先看 …

第 12 章 声明文件与类型扩展

节文章核心内容
12.112.1 .d.ts 与 @types 机制本节从类型擦除讲起,解释为什么编译产物 .js 里不剩任何类型信息、消费方却依然能获得完整补全,从而…
12.212.2 为无类型库编写声明本节讲的是 .d.ts 的实战编写:当一个库既没有自带类型、社区也没有 @types 包时,如何从 …
12.312.3 模块扩充与全局类型增强本节讲 TypeScript 最易被误用的一项能力:不新建声明,而是往已有类型上「长」成员。先讲清声…

第 13 章 运行时验证与类型安全边界

节文章核心内容
13.113.1 类型擦除带来的运行时盲区本节从类型擦除讲起:TypeScript 编译时会把 interface、类型注解与断言全部抹掉,只…
13.213.2 Zod 模式验证与类型推导本节介绍如何在运行时检查数据形状:用 Zod 声明 schema,用 z.infer 让编译期类型自…
13.313.3 API 契约与边界数据校验本节把校验真正落到工程上:先列出一份完整的边界清单,再逐个给出落地方式——环境变量启动期校验并 fa…

第 14 章 错误处理与异步编程

节文章核心内容
14.114.1 错误类型与 Result 模式本节把「错误」当成类型问题来讨论:为什么 catch 的参数只能是 unknown,如何用自定义错误…
14.214.2 Promise 与 async/await 的类型本节把 Promise 当成带类型参数的状态机来拆解:Promise 里的 T 描述什么,th…
14.314.3 并发控制、取消与超时本节解决异步编程里最容易被忽略的三个问题:并发数不受控、任务无法取消、请求没有超时。我们手写一个泛型…

第 15 章 测试与质量保障

节文章核心内容
15.115.1 单元测试(Vitest/Jest)本节从零为 TypeScript 项目搭起单元测试:先比较 Vitest 与 Jest 的取舍,再手…
15.215.2 类型测试(tsd/expect-type)本节讲一个常被忽视的话题:类型本身也要写测试。先说明运行时断言为什么测不到类型,再用 @ts-exp…
15.315.3 覆盖率、lint 与 CI 门禁本节是第 15 章收官,把零散的测试变成系统性防线:先厘清语句、分支、函数、行四种覆盖率口径与阈值配…

第 16 章 构建与工程配置

节文章核心内容
16.116.1 编译目标与严格模式配置本节把 tsconfig.json 里最容易配错的两组选项讲透:编译目标与严格模式。先看 targe…
16.216.2 esbuild/swc/tsup 与打包产物本节解释为什么 tsc 不再是唯一的编译路径,并对比 esbuild、swc、tsup 三类工具的定…
16.316.3 Monorepo 与 Project References本节解决「多个包如何在一个仓库里协同」这件事。先说清什么时候真的需要 Monorepo,再用一个 p…

第 17 章 全栈项目实战

节文章核心内容
17.117.1 项目结构与分层设计本节把前面散落的语言知识收拢成一个能交付的项目骨架:先对比按类型、按功能、按层三种组织方式的代价,再…
17.217.2 前后端共享类型与 API 契约本节解决全栈项目里最费神的一类问题:同一份数据结构在前后端被写了两遍。我们先比较手工复制、共享包、代…
17.317.3 部署、发布与版本演进本节把写好的 TypeScript 代码真正送上生产:先讲清构建产物与运行时的差异,对比静态托管、长…

第 18 章 大型项目架构与迁移

节文章核心内容
18.118.1 JavaScript 项目渐进式迁移本节讲解如何在不推倒重来的前提下,把类型系统逐步铺进一个存量 JavaScript 项目。内容包括三…
18.218.2 类型驱动的重构与团队规范本节讲如何把类型系统从「编译能过」升级为「持续重构的引擎」。内容包括编译器作为重构安全网的原理、用 …
18.318.3 学习路径与生态选型本节是全书的收尾,先给出一张覆盖 18 章的知识地图与能力自评表,再按前端应用、Node 后端、库与…

附录

节文章核心内容
—附录 A TypeScript 语法速查表本附录是一份可随时翻阅的 TypeScript 语法速查表:用表格对照原始类型与字面量、数组元组枚举…
—附录 B 内置工具类型与常用类型模式本附录分两部分:先给出一份内置工具类型全解,逐个列出签名、作用、等价手写实现与典型用例;再整理品牌类…
—附录 C 常用工具、库与资源本附录按类别汇总 TypeScript 生态里的常用工具与库:编译器与运行时、打包构建、类型检查与 …
—附录 D 常见问题与解决方案(FAQ)本附录汇总初学者最常撞上的十三类 TypeScript 报错与困惑,覆盖模块找不到声明、属性不存在、…
全部文章 Game Golang Saas Rust 游戏开发 客户端开发 GameDev TypeScript Lua Products
typescript

《TypeScript编程入门》14.2 Promise 与 async/await 的类型

本节把 Promise 当成带类型参数的状态机来拆解:Promise<T> 里的 T 描述什么,then、catch、finally 如何传递与拓宽类型,async 函数为什么必须返回 Promise<T>,await 又做了怎样的解包。我们用表格对比 all、allSettled、race、any 的类型差异,讲清串行与并行 await 的性能陷阱,并给出类型安全的请求封装写法。

8 分钟阅读
TypeScript TypeScript编程入门 Promise
typescript

《TypeScript编程入门》14.1 错误类型与 Result 模式

本节把「错误」当成类型问题来讨论:为什么 catch 的参数只能是 unknown,如何用自定义错误类配合 instanceof 收窄,以及如何用判别联合把失败编码成返回值。我们会手写一个带 map、mapErr、unwrap 的 Result 类型,并用表格对比异常与 Result 各自的适用边界,读完你能为业务代码选出一套可推导、可穷尽检查的错误处理方案。

9 分钟阅读
TypeScript TypeScript编程入门 错误处理
typescript

《TypeScript编程入门》13.3 API 契约与边界数据校验

本节把校验真正落到工程上:先列出一份完整的边界清单,再逐个给出落地方式——环境变量启动期校验并 fail fast、封装带 schema 的 typedFetch 解析上游响应、用泛型中间件校验 HTTP 请求体、区分 4xx 与 5xx 的错误归属、用 strict 与 passthrough 处理契约演进,最后用契约测试把前后端对齐。读完你能在自己的项目里搭出一套完整的边界防线。

10 分钟阅读
TypeScript TypeScript编程入门 API 契约
typescript

《TypeScript编程入门》13.2 Zod 模式验证与类型推导

本节介绍如何在运行时检查数据形状:用 Zod 声明 schema,用 z.infer 让编译期类型自动推导,告别「类型与校验规则各写一份」的漂移。内容覆盖 parse 与 safeParse 的取舍、issues 结构、optional/default/transform/refine 等修饰、z.input 与 z.output 的差异、判别联合与递归 schema,以及常见坑。

8 分钟阅读
TypeScript TypeScript编程入门 Zod
typescript

《TypeScript编程入门》13.1 类型擦除带来的运行时盲区

本节从类型擦除讲起:TypeScript 编译时会把 interface、类型注解与断言全部抹掉,只留下 JavaScript,于是「编译通过」并不等于「运行时安全」。我们会逐一拆开真实项目里最容易出事的几类盲区,包括 JSON.parse 后的断言、越界索引、Object.keys 的字符串键、结构化类型的多余属性、非空断言与异步回调,并给出信任边界清单,帮你判断校验该加在哪里。

8 分钟阅读
TypeScript TypeScript编程入门 类型擦除
typescript

《TypeScript编程入门》12.3 模块扩充与全局类型增强

本节讲 TypeScript 最易被误用的一项能力:不新建声明,而是往已有类型上「长」成员。先讲清声明合并的规则,再区分在脚本里 declare module 与在模块里 declare module 这两个语义相反的写法,演示给 Request 加 user、给 process.env 加字段等真实场景,并列出冲突报错与规避手法。读完你能安全地做全局增强。

8 分钟阅读
TypeScript TypeScript编程入门 模块扩充
typescript

《TypeScript编程入门》12.2 为无类型库编写声明

本节讲的是 .d.ts 的实战编写:当一个库既没有自带类型、社区也没有 @types 包时,如何从 JavaScript 源码、README 与运行时行为反推出准确的签名。内容覆盖三种粒度的声明策略、函数重载与可选参数、类与命名空间的合并写法、CommonJS 的 export = 与 import =、资源文件的通配声明,以及用类型测试保证声明不撒谎。读完你能为任意内部老库补上可用的类型。

8 分钟阅读
TypeScript TypeScript编程入门 类型声明
typescript

《TypeScript编程入门》12.1 .d.ts 与 @types 机制

本节从类型擦除讲起,解释为什么编译产物 .js 里不剩任何类型信息、消费方却依然能获得完整补全,从而引出 .d.ts 声明文件。我们会拆开 declare 的每一种用法,讲清「脚本」与「模块」在声明文件里的分水岭,梳理 @types 的查找顺序、typeRoots 与 types 的差别以及三斜线指令,并亲手写一个最小可用的声明文件。读完你能独立排查「找不到模块的类型声明」这类报错。

7 分钟阅读
TypeScript TypeScript编程入门 声明文件
typescript

《TypeScript编程入门》11.3 npm 包、类型声明与 exports

本节从使用者视角切换到包作者视角,讲清一个 npm 包如何被 TypeScript 正确识别。先看 package.json 里 main、module、types 这些历史字段的来历与局限,再重点拆解 exports 条件导出与其中的 types 条件、顺序要求,最后给出类型声明的三种来源、发布自己包的完整配置,以及消费者最常撞上的几类报错。

8 分钟阅读
TypeScript TypeScript编程入门 npm 包
typescript

《TypeScript编程入门》11.2 ESM/CJS 互操作与 moduleResolution

现实项目里 ES 模块与 CommonJS 长期并存,本节讲清两者如何互相调用。先看 package.json 的 type 字段与 .mjs/.cjs 扩展名如何决定文件的模块类型,再拆解 esModuleInterop、verbatimModuleSyntax 等开关到底改变了什么,以及 import type、__dirname 缺失、双包危害等实战坑与对应报错。

9 分钟阅读
TypeScript TypeScript编程入门 ESM/CJS 互操作
typescript

《TypeScript编程入门》11.1 ES 模块与模块解析

本节从模块化的历史讲起,说明为什么全局脚本会互相污染、ES 模块如何用显式的 export 与 import 把依赖写进代码。随后逐一拆解命名导出、默认导出、重命名与副作用导入的取舍,讲清相对说明符与裸说明符的区别,并用表格对照五种 moduleResolution 的查找规则与适用场景,最后给出扩展名、目录索引、循环依赖三类高频坑与对应报错。

9 分钟阅读
TypeScript TypeScript编程入门 ES 模块
typescript

《TypeScript编程入门》10.3 递归类型与类型性能治理

本节讲类型层面的最后一块硬骨头:递归类型如何用「自我引用加终止条件」描述 JSON、树与深层修饰;编译器为什么会抛出 2589 与 2456 两类错误;TypeScript 4.5 的尾递归消除与累加器写法如何把深度上限提到上千。后半程转入类型性能治理,用 tsc 的 extendedDiagnostics 与 generateTrace 定位实例化热点,并给出可落地的优化清单。

7 分钟阅读
TypeScript TypeScript编程入门 递归类型
typescript

《TypeScript编程入门》10.2 模板字面量类型

本节讲解模板字面量类型如何把字符串拼接搬进类型系统:用反引号加 ${} 构造字面量模式,与联合类型组合时自动展开成笛卡尔积,配合 Uppercase 等内置工具与 infer 实现字符串解析、Trim、Split、Replace 等递归算法。最后落到类型安全的事件名、路由参数与 i18n 键三个真实场景,并说明贪婪匹配、无法反向推断与编译性能这三类坑。

7 分钟阅读
TypeScript TypeScript编程入门 模板字面量类型
typescript

《TypeScript编程入门》10.1 内置工具类型全解

本节把 TypeScript 标准库里的内置工具类型逐个拆开:从对象修饰的 Partial、Required、Readonly,到集合运算的 Pick、Omit、Exclude、Extract,再到函数与异步相关的 ReturnType、Parameters、Awaited。我们用第 9 章的映射类型与条件类型手写它们,讲清浅层修饰与 Omit 键不受约束这两个常见坑,并给出分组速查表。

7 分钟阅读
TypeScript TypeScript编程入门 工具类型
typescript

《TypeScript编程入门》9.3 条件类型与 infer

本节讲解类型运算的最后一块拼图:条件类型 T extends U ? X : Y 如何充当类型层面的 if/else,分布式条件类型在联合类型上的展开规则,以及用方括号包裹阻止分发的技巧。随后深入 infer 关键字,演示如何从函数签名、数组、元组和 Promise 中提取类型,并手写 Exclude、ReturnType 等工具类型的实现。读完你能看懂类型库的黑箱签名,并规避 never 陷阱。

6 分钟阅读
TypeScript TypeScript编程入门 条件类型
typescript

《TypeScript编程入门》9.2 映射类型与键重映射(as)

本节讲解映射类型:如何用 [K in keyof T] 遍历一个类型的所有键并批量生成新类型,如何用 readonly 与 ? 的加减号增删修饰符,以及 TypeScript 4.1 引入的键重映射 as 如何借助模板字面量类型改写键名、借助 never 过滤掉不需要的键。本节会手写 Partial、Readonly、Required 等工具类型的内部实现,读完你能为自己的项目定制专用工具类型。

6 分钟阅读
TypeScript TypeScript编程入门 映射类型
typescript

《TypeScript编程入门》9.1 keyof·typeof 与索引访问类型

本节讲解 TypeScript 类型编程的三块基石:用 keyof 取出对象类型的全部键名,用 typeof 从运行时值反向推导类型,用索引访问类型 T[K] 精确取出某个属性或数组元素的类型。三者组合出的 keyof typeof 是工程中最常见的写法,能让类型与实现保持单一数据源。本节配有可运行示例与真实报错信息,读完你能读懂类型库中的索引写法,并为映射类型与条件类型打下基础。

7 分钟阅读
TypeScript TypeScript编程入门 keyof
typescript

《TypeScript编程入门》8.3 泛型在接口·类·函数中的协同

本节把泛型从函数扩展到接口与类,讲清三者各自声明类型参数的位置与作用域,解释为什么静态成员不能用类的类型参数,并给出「类级类型参数还是方法级类型参数」的选择标准。随后用类型安全仓储、泛型事件总线、链式 Builder 三个实战把接口、类、函数串起来,配常见报错速查,完成从会用泛型到会设计泛型抽象的过渡。

8 分钟阅读
TypeScript TypeScript编程入门 泛型接口
typescript

《TypeScript编程入门》8.2 泛型默认值与类型推断

本节讲清泛型默认值的语法、求值顺序,以及默认值必须满足约束这条硬规则。随后系统梳理类型推断的四个来源与优先级,解释为什么 TypeScript 至今不支持部分推断、如何用柯里化绕过,并介绍 TS 5.0 的 const 类型参数如何保住字面量精度。最后用可配置的请求封装串起全部知识点,给出常见推断失败场景与修法。

8 分钟阅读
TypeScript TypeScript编程入门 泛型默认值
typescript

《TypeScript编程入门》8.1 泛型约束(extends)

本节承接泛型函数入门,讲清为什么裸泛型在函数体里几乎什么都做不了,以及 extends 关键字如何把类型参数收窄到满足特定形状的类型。内容覆盖对象形状约束、keyof 与索引访问组合约束、一个类型参数约束另一个、交叉类型实现多重约束,并解析 does not satisfy the constraint 这类报错的成因与修法,帮助读者从能写泛型进阶到能设计泛型 API。

9 分钟阅读
TypeScript TypeScript编程入门 泛型约束