目 录
第 一部分 基础语法
第 1章 TypeScript简介 3
1.1 TypeScript的发展史 3
1.1.1 JavaScript的兴起 3
1.1.2 JavaScript的缺陷 5
1.1.3 TypeScript的诞生 6
1.2 搭建TypeScript开发环境 7
1.2.1 安装Node.js 7
1.2.2 安装TypeScript 8
1.2.3 安装Visual Studio Code 8
1.3 编写第 一个TypeScript
程序:Hello World 10
1.3.1 编写并运行
TypeScript程序 10
1.3.2 静态检查和智能提示 11
第 2章 语法结构与类型结构 13
2.1 语法结构 13
2.1.1 声明变量 14
2.1.2 标识符名称 14
2.1.3 数据类型 15
2.1.4 运算符 15
2.1.5 字面量 16
2.1.6 分号与断句 16
2.1.7 注释 17
2.1.8 表达式 17
2.1.9 流程控制 17
2.1.10 代码块 18
2.2 类型结构 19
第3章 原始类型 20
3.1 布尔类型 20
3.2 数值类型 21
3.3 长整型 22
3.4 字符串类型 22
3.5 枚举类型 24
3.5.1 数值枚举 24
3.5.2 字符串枚举 26
3.5.3 应慎用的枚举使用方式 26
3.5.4 常量枚举 28
3.6 symbol 29
3.7 undefined、null和NaN 29
3.7.1 undefined 29
3.7.2 null 30
3.7.3 NaN 30
3.8 类型转换 30
3.8.1 将其他类型转换为
布尔类型 30
3.8.2 将其他类型转换为数值
类型 31
3.8.3 将其他类型转换为
长整型 33
3.8.4 将其他类型转换为字符串类型 33
3.9 字面量类型 34
3.10 变量与常量 35
3.10.1 let关键字 35
3.10.2 const关键字 37
第4章 表达式与运算符 38
4.1 算术运算符 38
4.2 赋值运算符 40
4.3 字符串运算符 40
4.4 比较运算符 41
4.5 条件运算符 43
4.6 逻辑运算符 44
4.7 类型运算符 45
4.8 位运算符 46
4.9 运算符的优先级 47
第5章 流程控制 50
5.1 选择语句 50
5.1.1 if if…else if…else if语句 51
5.1.2 switch语句 54
5.2 循环语句 57
5.2.1 for语句 57
5.2.2 while语句 60
5.2.3 do…while语句 60
5.2.4 break与continue 关键字 61
第6章 引用类型 62
6.1 原始值与引用值 62
6.1.1 值的复制 63
6.1.2 值的传递 64
6.1.3 值的比较 65
6.1.4 常量的使用 66
6.2 引用类型分类 66
第7章 数组与元组 69
7.1 数组 69
7.1.1 数组的声明与读写 69
7.1.2 数组的遍历 70
7.1.3 数组的方法 70
7.1.4 只读数组 77
7.1.5 多维数组 77
7.2 元组 77
7.2.1 元组的声明和读写 77
7.2.2 可选元素与剩余元素 78
7.2.3 元组的方法 79
7.2.4 将元组转换为数组 79
第8章 函数 81
8.1 函数的声明与调用 81
8.1.1 以普通方式声明与调用 81
8.1.2 通过表达式声明与调用 82
8.1.3 特殊的声明与调用方式 84
8.2 函数的参数与返回值 85
8.2.1 普通参数与类型推导 86
8.2.2 可选参数 87
8.2.3 默认参数 88
8.2.4 剩余参数 88
8.2.5 返回值 90
8.3 函数的调用签名与重载 92
8.3.1 调用签名 92
8.3.2 重载函数 93
8.4 函数的内置属性 96
8.4.1 arguments 96
8.4.2 caller 97
8.4.3 this 98
8.5 函数的内置方法 100
8.5.1 apply()和call() 100
8.5.2 bind() 100
第9章 接口与对象 103
9.1 对象的声明 103
9.1.1 使用对象类型字面量
声明对象 104
9.1.2 使用类型别名声明
对象 106
9.1.3 使用接口声明对象 107
9.2 属性或方法的修饰符 107
9.2.1 可选修饰符 107
9.2.2 只读修饰符 108
9.2.3 索引签名 109
9.3 接口的合并 112
9.3.1 接口继承 112
9.3.2 交叉类型 113
9.3.3 声明合并 113
9.3.4 接口合并时的冲突 114
9.4 特殊对象类型 116
9.4.1 object 116
9.4.2 Object和{} 117
第 10章 类 119
10.1 类的声明 119
10.1.1 基本声明语法 119
10.1.2 创建实例对象 120
10.2 类的成员 121
10.2.1 属性 121
10.2.2 方法 123
10.2.3 构造函数 125
10.2.4 存取器 126
10.2.5 索引成员 128
10.3 类的继承 129
10.3.1 简单的继承 129
10.3.2 重写父类成员 130
10.3.3 复用父类成员 134
10.4 继承接口与抽象类 135
10.4.1 继承接口 135
10.4.2 继承抽象类 137
10.5 成员的可访问性 139
10.5.1 public 139
10.5.2 protected 140
10.5.3 private 140
10.5.4 可访问性的兼容性 142
10.6 静态成员 143
10.6.1 静态成员的声明与
访问 143
10.6.2 静态成员的继承 143
10.6.3 静态代码块 144
10.7 其他应用与注意事项 145
10.7.1 类的初始化顺序 145
10.7.2 参数属性 146
10.7.3 类表达式 146
10.7.4 不够严格的类 147
10.7.5 instanceof运算符 148
第 11章 顶部类型与底部类型 149
11.1 any 149
11.2 unknown 150
11.3 类型断言与类型防护 151
11.4 never 152
第 12章 进阶类型 154
12.1 泛型 154
12.1.1 泛型的基础用法 154
12.1.2 在函数中使用泛型 155
12.1.3 在类中使用泛型 157
12.1.4 泛型类型 158
12.1.5 泛型约束 159
12.2 类型别名 160
12.2.1 类型别名的基本用法 160
12.2.2 类型别名与接口的区别 161
12.3 联合类型与交叉类型 162
12.3.1 联合类型 162
12.3.2 交叉类型 163
第二部分 进阶语法
第 13章 模块与命名空间 167
13.1 模块 167
13.1.1 导出模块 167
13.1.2 使用被导出的模块 170
13.1.3 导入与导出TypeScript类型声明 173
13.1.4 导入或导出模块时的注意事项 175
13.1.5 编译与运行模块 176
13.1.6 解析模块路径 184
13.2 命名空间 185
13.2.1 声明命名空间 186
13.2.2 使用命名空间的成员 187
13.2.3 在多文件中使用命名空间 189
13.2.4 命名空间的本质与局限 190
13.3 声明合并 190
13.3.1 同类型之间的声明合并 191
13.3.2 不同类型之间的声明合并 193
第 14章 错误处理 195
14.1 捕获并处理错误 195
14.2 错误对象 198
14.3 自定义错误 200
14.3.1 抛出错误 200
14.3.2 自定义错误类型 201
第 15章 异步编程 203
15.1 异步任务运行机制 203
15.2 回调函数 205
15.2.1 常规异步任务 205
15.2.2 计时器 207
15.3 Promise对象 209
15.3.1 声明并使用Promise对象 209
15.3.2 错误处理 212
15.3.3 终必须被执行的代码 213
15.3.4 组合Promise对象 214
15.3.5 创建resolved或rejected状态的Promise对象 215
15.4 异步函数 215
15.4.1 Promise对象的局限性 215
15.4.2 使用async创建异步函数 217
15.4.3 通过await使用异步函数 217
15.4.4 以异步函数优化Promise对象 218
第 16章 内置引用对象 220
16.1 Date对象 220
16.1.1 创建日期 220
16.1.2 格式化日期 221
16.1.3 获取或设置日期 222
16.2 RegExp对象 224
16.2.1 创建RegExp对象 224
16.2.2 在字符串的方法中传入RegExp对象 225
16.2.3 直接使用RegExp对象 226
16.3 单例内置对象 227
16.3.1 globalThis对象 227
16.3.2 Math对象 228
16.3.3 console对象 230
第 17章 多线程编程 233
17.1 浏览器多线程—Web Worker 233
17.1.1 Web Worker的工作原理 233
17.1.2 专用Worker线程 234
17.1.3 共享Worker线程 237
17.1.4 Worker线程间的数据传递 239
17.2 服务器多线程:Worker Threads 240
17.2.1 基本使用 240
17.2.2 错误处理 242
17.2.3 其他事件 242
17.2.4 注册一次性事件 243
第三部分 编译与调试
第 18章 编译 247
18.1 编译命令 247
18.1.1 直接编译指定文件 247
18.1.2 编译选项:编译文件及输出路径 248
18.1.3 编译选项:按需输出 JavaScript代码 249
18.1.4 编译选项:具有调试作用的选项 250
18.1.5 编译选项:类型 检查 251
18.2 配置文件 255
18.2.1 tsconfig.json文件的创建及匹配规则 255
18.2.2 文件列表 257
18.2.3 编译选项 259
18.2.4 项目引用 261
18.2.5 配置继承 265
18.2.6 其他配置 267
18.3 三斜线指令 268
18.3.1 引用其他文件 269
18.3.2 指定包含在编译中的库文件 269
18.3.3 注意事项及其他指令 270
第 19章 在IDE中编写和调试代码 272
19.1 使用Visual Studio Code编写代码 272
19.1.1 常用功能 272
19.1.2 代码编写选项 274
19.1.3 扩展功能 278
19.2 调试TypeScript代码 279
19.2.1 在IDE中调试代码 279
19.2.2 在浏览器中调试代码 280
第 20章 引入扩展工具 282
20.1 引入静态检查工具 ESLint 282
20.1.1 ESLint的安装与 应用 282
20.1.2 配置检查规则 284
20.2 引入单元测试工具Jest 285
20.2.1 Jest的安装与 配置 285
20.2.2 编写和执行单元测试 286
第四部分 项目应用
第 21章 在TypeScript项目中使用JavaScript 291
21.1 使用声明文件 291
21.1.1 使用声明文件的原因 291
21.1.2 为JavaScript编写声明文件 293
21.1.3 为TypeScript生成声明 文件 296
21.2 使用第三方 JavaScript 296
21.2.1 使用自带声明文件的第三方库 296
21.2.2 使用DefinitelyTyped声明文件库 297
21.2.3 自行编写声明模块 297
21.3 将项目从JavaScript迁移到TypeScript中 299
第 22章 使用TypeScript开发后端项目 300
22.1 后端开发简介 301
22.1.1 常用的后端框架 301
22.1.2 Express框架的用法 301
22.2 实战项目案例:编写任务管理系统后端API 304
22.2.1 编写任务类型声明并实现 任务数据访问功能 304
22.2.2 编写任务管理后端 服务API 306
第 23章 使用TypeScript开发前端项目 309
23.1 前端开发简介 309
23.1.1 常用的前端框架 309
23.1.2 React框架的用法 310
23.2 实战项目案例:编写任务管理系统的前端界面 311
23.2.1 编写任务类型声明及任务管理后端API 312
23.2.2 编写添加任务UI组件及任务列表项UI组件 313
23.2.3 编写任务管理页面及样式 315