前言
- 本书配套资料
- 包含每一章的代码示例、练习题参考答案
- github 链接 👉🏻 https://github.com/bcherny/programming-typescript-answers
- 压缩包 👉🏻 《TypeScript 编程》配套源码.zip
- 勘误等其他信息:https://www.oreilly.com/catalog/errata.csp?isbn=0636920158059
第 1 章 导言
- 类型安全:借助类型避免程序做无效的事情。
- 通过一个含有一些无效操作的 demo,简单对比一下 js、ts 分别是在什么阶段告诉你代码有问题的
3 + []
let obj = {}
obj.foo
function a(b) {
return b / 2
}
a("z")
- js 需要等到代码运行时才会抛出错误
- ts 在输入代码的过程中,文本编辑器会给出错误消息
第 2 章 TypeScript 概述
- 运行程序的步骤
- 把程序解析为 AST
- 把 AST 编译成字节码
- 运行时计算字节码
- ts 不直接编译成字节码,而是编译成 js 代码
- 类型检查器:用于检查代码是否符合类型安全要求的特殊程序。
- 运行 ts 的步骤
- TypeScript 源码 → TypeScript AST
- 类型检查器检查 AST
- TypeScript AST → JavaScript 源码
- JavaScript 源码 → JavaScript AST
- JavaScript AST → 字节码
- 运行时计算字节码
- 运行 ts 的前 3 步:tsc 的指责
- 运行 ts 的后 3 步:js 宿主环境的指责
- 运行 ts 的前 2 步才会用到 ts 的类型系统
- ts 的类型系统所提供的类型信息在第 3 步中生成的 js 源码中是不存在的
- 类型系统:类型检查器为程序分配类型时使用的一系列规则。
- 一般来说,类型系统有两种:
- 一种通过显式句法告诉编译器所有值的类型
- 另一种自动推导值的类型
- ts 身兼两种类型系统,可以显式注解类型,也可以让 ts 推导多数类型
- 【建议】非必要的情况下,不要显式地写类型注解
let a: number = 1 // a 是一个数字
let b: string = "hello" // b 是一个字符串
let c: boolean[] = [true, false] // c 是一个布尔值数组
// 即便你不显式地写明变量的类型,ts 也能根据赋的值推导出变量的类型
let a = 1 // a 是 number
let b = "hello" // b 是 string
let c = [true, false] // c 是 boolean[]
- 比较 ts 和 js 的类型系统
类型系统特性 |
JavaScript |
TypeScript |
类型是如何绑定的? |
动态 |
静态 |
是否自动转换类型? |
是 |
否(多数时候) |
何时检查类型? |
运行时 |
编译时 |
何时报告错误? |
运行时(多数时候) |
编译时(多数时候) |
第 3 章 类型全解
第 4 章 函数
第 5 章 类和接口
第 6 章 类型进阶
第 7 章 处理错误
第 8 章 异步编程、并发和并行
第 9 章 前后端框架
第 10 章 命名空间和模块
第 11 章 与 JavaScript 互操作
第 12 章 构建和运行 TypeScript
第 13 章 总结