[套装书]编程与类型系统+TypeScript入门与实战(2册)

作者
弗拉德·里斯库迪亚 钟胜平
丛书名
华章程序员书库
出版社
机械工业出版社
ISBN
9782101251632
简要
简介
内容简介书籍计算机书籍 ---------------------------编程与类型系统--------------------------- 本书全面介绍类型系统的特性,从基本类型开始,一直介绍到函数类型和子类型、OOP、泛型编程和高阶类型(如函子和单子)。本书没有关注这些特性背后的理论,而是通过实际应用的方式来解释每种特性。本书说明了如何以及何时使用每种特性来改进代码。 ---------------------------TypeScript入门与实战--------------------------- TypeScript是一个开源的、跨平台且带有类型系统的avaScript超集,可以编译为纯JavaScript,然后运行在任意浏览器和其他环境中,使开发者可以使用一些未来JavaScript标准(ECMAScript 6和7)中的特性。TypeScript为JavaScript添加了可选的静态类型、类和模块,可使大型JavaScript应用使用更好的工具,并保持更清晰的结构。 本书系统化介绍TypeScript程序设计,包括四大部分。第一篇“初识TypeScript”介绍TypeScript与JavaScript的关系以及快速开始编写第一个TypeScript程序,第二篇“ TypeScript语言概览”介绍TypeScript语言基础、迭代器与生成器、装饰器、命名空间、模块等。第三篇“TypeScript类型系统”介绍TypeScript类型,如面量、枚举、非Nullable、非Nullable等,还介绍了更多高级类型,如联合、交叉、索引、映射对象、泛型、类类型、接口、类型别名、多态的this、有条件类型、类型查询、类型断言等,最后介绍类型更深入内容,如类型声明合并、类型推论、类型兼容性、外部类型声明、编写声明文件等。第四篇“TypeScript应用”通过综合案例介绍TypeScript的配置管理、开发技巧等。
目录



---------------------------编程与类型系统---------------------------


前言
致谢
关于本书
类型及可能的取值
常用算法
第1章 类型简介1
1.1 为什么存在类型2
1.1.1 0和12
1.1.2 类型和类型系统的定义3
1.2 类型系统的优点4
1.2.1 正确性5
1.2.2 不可变性6
1.2.3 封装8
1.2.4 可组合性9
1.2.5 可读性11
1.3 类型系统的类型12
1.3.1 动态类型和静态类型12
1.3.2 弱类型与强类型13
1.3.3 类型推断15
小结15
第2章 基本类型17
2.1 设计不返回值的函数17
2.1.1 空类型18
2.1.2 单元类型20
2.1.3 习题21
2.2 布尔逻辑和短路21
2.2.1 布尔表达式22
2.2.2 短路计算22
2.2.3 习题24
2.3 数值类型的常见陷阱24
2.3.1 整数类型和溢出25
2.3.2 浮点类型和圆整28
2.3.3 任意大数30
2.3.4 习题31
2.4 编码文本31
2.4.1 拆分文本31
2.4.2 编码32
2.4.3 编码库34
2.4.4 习题36
2.5 使用数组和引用构建数据结构36
2.5.1 固定大小数组36
2.5.2 引用37
2.5.3 高效列表38
2.5.4 二叉树40
2.5.5 关联数组43
2.5.6 实现时的权衡44
2.5.7 习题44
小结44
习题答案45
第3章 组合46
3.1 复合类型47
3.1.1 元组47
3.1.2 赋予意义49
3.1.3 维护不变量50
3.1.4 习题53
3.2 使用类型表达多选一53
3.2.1 枚举53
3.2.2 可选类型55
3.2.3 结果或错误57
3.2.4 变体62
3.2.5 习题65
3.3 访问者模式65
3.3.1 简单实现66
3.3.2 使用访问者模式67
3.3.3 访问变体69
3.3.4 习题71
3.4 代数数据类型71
3.4.1 乘积类型71
3.4.2 和类型72
3.4.3 习题72
小结73
习题答案74
第4章 类型安全75
4.1 避免基本类型偏执来防止错误解释76
4.1.1 火星气候探测者号77
4.1.2 基本类型偏执反模式79
4.1.3 习题79
4.2 实施约束80
4.2.1 使用构造函数实施约束80
4.2.2 使用工厂实施约束81
4.2.3 习题82
4.3 添加类型信息82
4.3.1 类型转换82
4.3.2 在类型系统之外跟踪类型83
4.3.3 常见类型转换86
4.3.4 习题89
4.4 隐藏和恢复类型信息89
4.4.1 异构集合90
4.4.2 序列化92
4.4.3 习题95
小结96
习题答案96
第5章 函数类型98
5.1 一个简单的策略模式99
5.1.1 函数式策略100
5.1.2 函数的类型101
5.1.3 策略实现102
5.1.4 一等函数102
5.1.5 习题103
5.2 不使用switch语句的状态机103
5.2.1 类型编程小试牛刀104
5.2.2 状态机106
5.2.3 回顾状态机实现111
5.2.4 习题112
5.3 使用延迟值避免高开销的计算112
5.3.1 lambda113
5.3.2 习题115
5.4 使用map、filter和reduce115
5.4.1 map()115
5.4.2 filter()117
5.4.3 reduce()119
5.4.4 库支持122
5.4.5 习题123
5.5 函数式编程123
小结123
习题答案124
第6章 函数类型的高级应用126
6.1 一个简单的装饰器模式126
6.1.1 函数装饰器128
6.1.2 装饰器实现130
6.1.3 闭包130
6.1.4 习题131
6.2 实现一个计数器131
6.2.1 一个面向对象的计数器132
6.2.2 函数式计数器133
6.2.3 一个可恢复的计数器134
6.2.4 回顾计数器实现135
6.2.5 习题135
6.3 异步执行运行时间长的操作135
6.3.1 同步执行136
6.3.2 异步执行:回调136
6.3.3 异步执行模型137
6.3.4 回顾异步函数141
6.3.5 习题141
6.4 简化异步代码142
6.4.1 链接promise143
6.4.2 创建promise144
6.4.3 关于promise的更多信息146
6.4.4 async/await150
6.4.5 回顾整洁的异步代码152
6.4.6 习题152
小结153
习题答案153
第7章 子类型155
7.1 在TypeScript中区分相似的类型156
7.1.1 结构和名义子类型的优缺点158
7.1.2 在TypeScript中模拟名义子类型159
7.1.3 习题160
7.2 子类型的极端情况160
7.2.1 安全的反序列化160
7.2.2 错误情况的值164
7.2.3 回顾顶层和底层类型167
7.2.4 习题168
7.3 允许的替换168
7.3.1 子类型与和类型169
7.3.2 子类型和集合171
7.3.3 子类型和函数的返回类型172
7.3.4 子类型和函数实参类型174
7.3.5 回顾可变性178
7.3.6 习题178
小结179
习题答案179
第8章 面向对象编程的元素181
8.1 使用接口定义契约182
8.2 继承数据和行为185
8.2.1 “是一个”经验准则185
8.2.2 建模层次186
8.2.3 参数化表达式的行为187
8.2.4 习题188
8.3 组合数据和行为189
8.3.1 “有一个”经验准则189
8.3.2 复合类190
8.3.3 实现适配器模式192
8.3.4 习题194
8.4 扩展数据和行为194
8.4.1 使用组合扩展行为195
8.4.2 使用混入扩展行为197
8.4.3 TypeScript中的混入198
8.4.4 习题199
8.5 纯粹面向对象代码的替代方案199
8.5.1 和类型200
8.5.2 函数式编程202
8.5.3 泛型编程203
小结204
习题答案204
第9章 泛型数据结构206
9.1 解耦关注点207
9.1.1 可重用的恒等函数208
9.1.2 可选类型210
9.1.3 泛型类型211
9.1.4 习题211
9.2 泛型数据布局212
9.2.1 泛型数据结构212
9.2.2 什么是数据结构213
9.2.3 习题214
9.3 遍历数据结构214
9.3.1 使用迭代器216
9.3.2 流线化迭代代码220
9.3.3 回顾迭代器225
9.3.4 习题226
9.4 数据流226
9.4.1 处理管道227
9.4.2 习题228
小结228
习题答案229
第10章 泛型算法和迭代器232
10.1 更好的map()、filter()和reduce()233
10.1.1 map()233
10.1.2 filter()234
10.1.3 reduce()234
10.1.4 filter()/reduce()管道235
10.1.5 习题236
10.2 常用算法236
10.2.1 使用算法代替循环237
10.2.2 实现流畅管道237
10.2.3 习题241
10.3 约束类型参数241
10.3.1 具有类型约束的泛型数据结构242
10.3.2 具有类型约束的泛型算法243
10.3.3 习题245
10.4 高效reverse和其他使用迭代器的算法245
10.4.1 迭代器的基础模块247
10.4.2 有用的find()251
10.4.3 高效的reverse()254
10.4.4 高效地获取元素257
10.4.5 回顾迭代器259
10.4.6 习题260
10.5 自适应算法260
小结262
习题答案263
第11章 高阶类型及其他266
11.1 更加通用的map267
11.1.1 处理结果或传播错误270
11.1.2 混搭函数的应用272
11.1.3 函子和高阶类型273
11.1.4 函数的函子276
11.1.5 习题277
11.2 单子277
11.2.1 结果或错误277
11.2.2 map()与bind()的区别282
11.2.3 单子模式284
11.2.4 continuation单子285
11.2.5 列表单子286
11.2.6 其他单子288
11.2.7 习题288
11.3 继续学习289
11.3.1 函数式编程289
11.3.2 泛型编程289
11.3.3 高阶类型和范畴论289
11.3.4 从属类型290
11.3.5 线性类型290
小结290
习题答案291
附录A TypeScript的安装及本书的源代码293
附录B TypeScript速览表295



---------------------------TypeScript入门与实战---------------------------


前言
第一篇 初识TypeScript
第1章 TypeScript简介 2
1.1 什么是TypeScript 2
1.1.1 始于JavaScript,终于JavaScript 3
1.1.2 可选的静态类型 4
1.1.3 开放与跨平台 4
1.2 为什么要使用TypeScript 5
1.2.1 易于发现代码中的错误 5
1.2.2 提高生产力 6
1.2.3 支持JavaScript的最新特性 7
1.3 成功案例 8
1.3.1 Visual Studio Code 8
1.3.2 Angular 9
第2章 快速开始 10
2.1 在线编写并运行TypeScript 10
2.1.1 Hello World! 11
2.1.2 扩展功能:选择TypeScript版本 12
2.1.3 扩展功能:TypeScript配置项 12
2.2 本地编写并运行TypeScript 13
2.2.1 选择代码编辑器 13
2.2.2 安装Visual Studio Code 15
2.2.3 安装TypeScript 15
2.2.4 创建文件 16
2.2.5 编译程序 17
2.2.6 运行程序 18
2.2.7 可选步骤:设置默认构建任务 18
第二篇 TypeScript语言概览
第3章 TypeScript语言基础 22
3.1 变量 22
3.1.1 变量名 23
3.1.2 变量声明 23
3.2 注释 24
3.2.1 单行注释与多行注释 25
3.2.2 区域注释 25
3.3 数据类型 26
3.3.1 Undefined 27
3.3.2 Null 27
3.3.3 Boolean 27
3.3.4 String 27
3.3.5 Number 28
3.3.6 Symbol 28
3.3.7 Object 29
3.4 字面量 29
3.4.1 Null字面量 30
3.4.2 Boolean字面量 30
3.4.3 Number字面量 30
3.4.4 字符串字面量 30
3.4.5 模板字面量 30
3.5 对象 31
3.5.1 对象字面量 31
3.5.2 原型对象 32
3.6 数组 34
3.6.1 数组字面量 34
3.6.2 数组中的元素 34
3.7 函数 34
3.7.1 函数声明 34
3.7.2 函数表达式 35
3.7.3 箭头函数 36
第4章 TypeScript语言进阶 37
4.1 BigInt 37
4.1.1 创建BigInt 38
4.1.2 BigInt与Number 38
4.2 展开运算符 39
4.2.1 展开数组字面量 39
4.2.2 展开对象字面量 39
4.2.3 展开函数参数 39
4.3 解构 40
4.3.1 数组解构 40
4.3.2 对象解构 40
4.4 可选链运算符 40
4.4.1 基础语法 41
4.4.2 短路求值 41
4.5 空值合并运算符 42
第三篇 TypeScript类型系统
第5章 TypeScript类型基础 44
5.1 类型注解 44
5.2 类型检查 45
5.2.1 非严格类型检查 45
5.2.2 严格类型检查 45
5.3 原始类型 46
5.3.1 boolean 46
5.3.2 string 47
5.3.3 number 47
5.3.4 bigint 47
5.3.5 symbol与unique symbol 47
5.3.6 Nullable 50
5.3.7 void 53
5.4 枚举类型 54
5.4.1 数值型枚举 55
5.4.2 字符串枚举 56
5.4.3 异构型枚举 57
5.4.4 枚举成员映射 58
5.4.5 常量枚举成员与计算枚举成员 58
5.4.6 联合枚举类型 62
5.4.7 const枚举类型 65
5.5 字面量类型 66
5.5.1 boolean字面量类型 66
5.5.2 string字面量类型 67
5.5.3 数字字面量类型 67
5.5.4 枚举成员字面量类型 68
5.6 单元类型 68
5.7 顶端类型 69
5.7.1 any 69
5.7.2 unknown 71
5.7.3 小结 73
5.8 尾端类型 74
5.8.1 never 74
5.8.2 应用场景 75
5.9 数组类型 76
5.9.1 数组类型定义 76
5.9.2 数组元素类型 78
5.9.3 只读数组 79
5.10 元组类型 80
5.10.1 元组的定义 80
5.10.2 只读元组 81
5.10.3 访问元组中的元素 82
5.10.4 元组类型中的可选元素 83
5.10.5 元组类型中的剩余元素 83
5.10.6 元组的长度 84
5.10.7 元组类型与数组类型的兼容性 85
5.11 对象类型 85
5.11.1 Object 86
5.11.2 object 89
5.11.3 对象类型字面量 91
5.11.4 弱类型 97
5.11.5 多余属性 97
5.12 函数类型 102
5.12.1 常规参数类型 102
5.12.2 可选参数类型 102
5.12.3 默认参数类型 104
5.12.4 剩余参数类型 105
5.12.5 解构参数类型 106
5.12.6 返回值类型 106
5.12.7 函数类型字面量 108
5.12.8 调用签名 109
5.12.9 构造函数类型字面量 110
5.12.10 构造签名 111
5.12.11 调用签名与构造签名 111
5.12.12 重载函数 112
5.12.13 函数中this值的类型 118
5.13 接口 119
5.13.1 接口声明 119
5.13.2 属性签名 120
5.13.3 调用签名 120
5.13.4 构造签名 121
5.13.5 方法签名 121
5.13.6 索引签名 122
5.13.7 可选属性与方法 125
5.13.8 只读属性与方法 126
5.13.9 接口的继承 127
5.14 类型别名 129
5.14.1 类型别名声明 129
5.14.2 递归的类型别名 130
5.14.3 类型别名与接口 132
5.15 类 133
5.15.1 类的定义 134
5.15.2 成员变量 135
5.15.3 成员函数 138
5.15.4 成员存取器 138
5.15.5 索引成员 140
5.15.6 成员可访问性 140
5.15.7 构造函数 143
5.15.8 参数成员 144
5.15.9 继承 145
5.15.10 实现接口 150
5.15.11 静态成员 151
5.15.12 抽象类和抽象成员 153
5.15.13 this类型 155
5.15.14 类类型 156
第6章 TypeScript类型进阶 158
6.1 泛型 158
6.1.1 泛型简介 159
6.1.2 形式类型参数 160
6.1.3 实际类型参数 161
6.1.4 泛型约束 162
6.1.5 泛型函数 165
6.1.6 泛型接口 167
6.1.7 泛型类型别名 168
6.1.8 泛型类 169
6.2 局部类型 170
6.3 联合类型 171
6.3.1 联合类型字面量 171
6.3.2 联合类型的类型成员 173
6.4 交叉类型 176
6.4.1 交叉类型字面量 176
6.4.2 交叉类型的类型成员 178
6.4.3 交叉类型与联合类型 180
6.5 索引类型 181
6.5.1 索引类型查询 182
6.5.2 索引访问类型 185
6.5.3 索引类型的应用 186
6.6 映射对象类型 187
6.6.1 映射对象类型声明 187
6.6.2 映射对象类型解析 188
6.6.3 映射对象类型应用 188
6.6.4 同态映射对象类型 190
6.7 条件类型 196
6.7.1 条件类型的定义 196
6.7.2 分布式条件类型 197
6.7.3 infer关键字 199
6.8 内置工具类型 201
6.8.1 Partial 201
6.8.2 Required 202
6.8.3 Readonly 202
6.8.4 Record 202
6.8.5 Pick 202
6.8.6 Omit 203
6.8.7 Exclude 203
6.8.8 Extract 203
6.8.9 NonNullable 203
6.8.10 Parameters 204
6.8.11 ConstructorParameters 204
6.8.12 ReturnType 204
6.8.13 InstanceType 205
6.8.14 ThisParameterType 205
6.8.15 OmitThisParameter 206
6.8.16 ThisType 206
6.9 类型查询 206
6.10 类型断言 207
6.10.1 类型断言 208
6.10.2 as T类型断言 208
6.10.3 类型断言的约束 209
6.10.4 const类型断言 210
6.10.5 !类型断言 212
6.11 类型细化 213
6.11.1 类型守卫 214
6.11.2 可辨识联合类型 225
6.11.3 赋值语句分析 232
6.11.4 基于控制流的类型分析 233
6.11.5 断言函数 233
第7章 TypeScript类型深入 238
7.1 子类型兼容性 238
7.1.1 类型系统可靠性 239
7.1.2 子类型的基本性质 239
7.1.3 顶端类型与尾端类型 240
7.1.4 原始类型 240
7.1.5 函数类型 241
7.1.6 对象类型 245
7.1.7 泛型 249
7.1.8 联合类型 250
7.1.9 交叉类型 251
7.2 赋值兼容性 251
7.3 类型推断 253
7.3.1 常规类型推断 253
7.3.2 按上下文归类 255
7.4 类型放宽 256
7.4.1 常规类型放宽 256
7.4.2 字面量类型放宽 257
7.5 命名空间 261
7.5.1 命名空间声明 262
7.5.2 导出命名空间内的声明 263
7.5.3 别名导入声明 265
7.5.4 在多文件中使用命名空间 266
7.5.5 小结 269
7.6 模块 269
7.6.1 模块简史 269
7.6.2 ECMAScript模块 273
7.6.3 模块导出 273
7.6.4 模块导入 276
7.6.5 重命名模块导入和导出 278
7.6.6 针对类型的模块导入与导出 280
7.6.7 动态模块导入 284
7.6.8 --module 285
7.7 外部声明 286
7.7.1 外部类型声明 287
7.7.2 外部模块声明 292
7.8 使用声明文件 293
7.8.1 语言内置的声明文件 293
7.8.2 第三方声明文件 293
7.8.3 自定义声明文件 298
7.9 模块解析 299
7.9.1 相对模块导入 299
7.9.2 非相对模块导入 300
7.9.3 模块解析策略 301
7.9.4 模块解析策略之Classic 301
7.9.5 模块解析策略之Node 304
7.9.6 --baseUrl 308
7.9.7 paths 310
7.9.8 rootDirs 312
7.9.9 导入外部模块声明 312
7.9.10 --traceResolution 313
7.10 声明合并 314
7.10.1 接口声明合并 315
7.10.2 枚举声明合并 317
7.10.3 类声明合并 318
7.10.4 命名空间声明合并 318
7.10.5 扩充模块声明 321
7.10.6 扩充全局声明 322
第四篇 TypeScript应用
第8章 TypeScript配置管理 324
8.1 编译器 324
8.1.1 安装编译器 325
8.1.2 编译程序 326
8.2 编译选项 328
8.2.1 编译选项风格 328
8.2.2 使用编译选项 330
8.2.3 严格类型检查 331
8.2.4 编译选项列表 337
8.3 tsconfig.json 338
8.3.1 使用配置文件 338
8.3.2 编译选项列表 340
8.3.3 编译文件列表 342
8.3.4 声明文件列表 346
8.3.5 继承配置文件 348
8.4 工程引用 351
8.4.1 使用工程引用 352
8.4.2 工程引用示例 353
8.4.3 --build 354
8.4.4 solution模式 356
8.5 JavaScript类型检查 357
8.5.1 编译JavaScript 357
8.5.2 JavaScript类型检查 358
8.5.3 JSDoc与类型 360
8.6 三斜线指令 363
8.6.1 / 364
8.6.2 / 366
8.6.3 / 367
第9章 TypeScript项目实践 371
9.1 TypeScript与Babel 371
9.1.1 Babel 372
9.1.2 TypeScript编译器 372
9.1.3 实例演示 374
9.1.4 注意事项 380
9.1.5 小结 381
9.2 TypeScript与webpack 381
9.2.1 webpack 381
9.2.2 实例演示 381
9.2.3 小结 385
9.3 TypeScript与ESLint 385
9.3.1 ESLint 386
9.3.2 实例演示 386
9.3.3 集成Visual Studio Code 390
9.3.4 小结 393
9.4 TypeScript与Visual Studio Code 393
9.4.1 代码格式化 394
9.4.2 组织模块导入语句 395
9.4.3 代码导航 395
9.4.4 快速修复 396
9.4.5 重构工具 396
9.4.6 CodeLens 397

推荐

车牌查询
桂ICP备20004708号-3