为你推荐
前言
致谢
关于本书
类型及可能的取值
常用算法
第1章 类型简介
1.1 为什么存在类型
1.1.1 0和1
1.1.2 类型和类型系统的定义
1.2 类型系统的优点
1.2.1 正确性
1.2.2 不可变性
1.2.3 封装
1.2.4 可组合性
1.2.5 可读性
1.3 类型系统的类型
1.3.1 动态类型和静态类型
1.3.2 弱类型与强类型
1.3.3 类型推断
小结
第2章 基本类型
2.1 设计不返回值的函数
2.1.1 空类型
2.1.2 单元类型
2.1.3 习题
2.2 布尔逻辑和短路
2.2.1 布尔表达式
2.2.2 短路计算
2.2.3 习题
2.3 数值类型的常见陷阱
2.3.1 整数类型和溢出
2.3.2 浮点类型和圆整
2.3.3 任意大数
2.3.4 习题
2.4 编码文本
2.4.1 拆分文本
2.4.2 编码
2.4.3 编码库
2.4.4 习题
2.5 使用数组和引用构建数据结构
2.5.1 固定大小数组
2.5.2 引用
2.5.3 高效列表
2.5.4 二叉树
2.5.5 关联数组
2.5.6 实现时的权衡
2.5.7 习题
小结
习题答案
第3章 组合
3.1 复合类型
3.1.1 元组
3.1.2 赋予意义
3.1.3 维护不变量
3.1.4 习题
3.2 使用类型表达多选一
3.2.1 枚举
3.2.2 可选类型
3.2.3 结果或错误
3.2.4 变体
3.2.5 习题
3.3 访问者模式
3.3.1 简单实现
3.3.2 使用访问者模式
3.3.3 访问变体
3.3.4 习题
3.4 代数数据类型
3.4.1 乘积类型
3.4.2 和类型
3.4.3 习题
小结
习题答案
第4章 类型安全
4.1 避免基本类型偏执来防止错误解释
4.1.1 火星气候探测者号
4.1.2 基本类型偏执反模式
4.1.3 习题
4.2 实施约束
4.2.1 使用构造函数实施约束
4.2.2 使用工厂实施约束
4.2.3 习题
4.3 添加类型信息
4.3.1 类型转换
4.3.2 在类型系统之外跟踪类型
4.3.3 常见类型转换
4.3.4 习题
4.4 隐藏和恢复类型信息
4.4.1 异构集合
4.4.2 序列化
4.4.3 习题
小结
习题答案
第5章 函数类型
5.1 一个简单的策略模式
5.1.1 函数式策略
5.1.2 函数的类型
5.1.3 策略实现
5.1.4 一等函数
5.1.5 习题
5.2 不使用switch语句的状态机
5.2.1 类型编程小试牛刀
5.2.2 状态机
5.2.3 回顾状态机实现
5.2.4 习题
5.3 使用延迟值避免高开销的计算
5.3.1 lambda
5.3.2 习题
5.4 使用map、filter和reduce
5.4.1 map()
5.4.2 filter()
5.4.3 reduce()
5.4.4 库支持
5.4.5 习题
5.5 函数式编程
小结
习题答案
第6章 函数类型的高级应用
6.1 一个简单的装饰器模式
6.1.1 函数装饰器
6.1.2 装饰器实现
6.1.3 闭包
6.1.4 习题
6.2 实现一个计数器
6.2.1 一个面向对象的计数器
6.2.2 函数式计数器
6.2.3 一个可恢复的计数器
6.2.4 回顾计数器实现
6.2.5 习题
6.3 异步执行运行时间长的操作
6.3.1 同步执行
6.3.2 异步执行:回调
6.3.3 异步执行模型
6.3.4 回顾异步函数
6.3.5 习题
6.4 简化异步代码
6.4.1 链接promise
6.4.2 创建promise
6.4.3 关于promise的更多信息
6.4.4 async/await
6.4.5 回顾整洁的异步代码
6.4.6 习题
小结
习题答案
第7章 子类型
7.1 在TypeScript中区分相似的类型
7.1.1 结构和名义子类型的优缺点
7.1.2 在TypeScript中模拟名义子类型
7.1.3 习题
7.2 子类型的极端情况
7.2.1 安全的反序列化
7.2.2 错误情况的值
7.2.3 回顾顶层和底层类型
7.2.4 习题
7.3 允许的替换
7.3.1 子类型与和类型
7.3.2 子类型和集合
7.3.3 子类型和函数的返回类型
7.3.4 子类型和函数实参类型
7.3.5 回顾可变性
7.3.6 习题
小结
习题答案
第8章 面向对象编程的元素
8.1 使用接口定义契约
8.2 继承数据和行为
8.2.1 “是一个”经验准则
8.2.2 建模层次
8.2.3 参数化表达式的行为
8.2.4 习题
8.3 组合数据和行为
8.3.1 “有一个”经验准则
8.3.2 复合类
8.3.3 实现适配器模式
8.3.4 习题
8.4 扩展数据和行为
8.4.1 使用组合扩展行为
8.4.2 使用混入扩展行为
8.4.3 TypeScript中的混入
8.4.4 习题
8.5 纯粹面向对象代码的替代方案
8.5.1 和类型
8.5.2 函数式编程
8.5.3 泛型编程
小结
习题答案
第9章 泛型数据结构
9.1 解耦关注点
9.1.1 可重用的恒等函数
9.1.2 可选类型
9.1.3 泛型类型
9.1.4 习题
9.2 泛型数据布局
9.2.1 泛型数据结构
9.2.2 什么是数据结构
9.2.3 习题
9.3 遍历数据结构
9.3.1 使用迭代器
9.3.2 流线化迭代代码
9.3.3 回顾迭代器
9.3.4 习题
9.4 数据流
9.4.1 处理管道
9.4.2 习题
小结
习题答案
第10章 泛型算法和迭代器
10.1 更好的map()、filter()和reduce()
10.1.1 map()
10.1.2 filter()
10.1.3 reduce()
10.1.4 filter()/reduce()管道
10.1.5 习题
10.2 常用算法
10.2.1 使用算法代替循环
10.2.2 实现流畅管道
10.2.3 习题
10.3 约束类型参数
10.3.1 具有类型约束的泛型数据结构
10.3.2 具有类型约束的泛型算法
10.3.3 习题
10.4 高效reverse和其他使用迭代器的算法
10.4.1 迭代器的基础模块
10.4.2 有用的find()
10.4.3 高效的reverse()
10.4.4 高效地获取元素
10.4.5 回顾迭代器
10.4.6 习题
10.5 自适应算法
小结
习题答案
第11章 高阶类型及其他
11.1 更加通用的map
11.1.1 处理结果或传播错误
11.1.2 混搭函数的应用
11.1.3 函子和高阶类型
11.1.4 函数的函子
11.1.5 习题
11.2 单子
11.2.1 结果或错误
11.2.2 map()与bind()的区别
11.2.3 单子模式
11.2.4 continuation单子
11.2.5 列表单子
11.2.6 其他单子
11.2.7 习题
11.3 继续学习
11.3.1 函数式编程
11.3.2 泛型编程
11.3.3 高阶类型和范畴论
11.3.4 从属类型
11.3.5 线性类型
小结
习题答案
附录A TypeScript的安装及本书的源代码
附录B TypeScript速览表
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜