前言

  1. 本书配套资料
    1. 包含每一章的代码示例、练习题参考答案
    2. github 链接 👉🏻 https://github.com/bcherny/programming-typescript-answers
    3. 压缩包 👉🏻 《TypeScript 编程》配套源码.zip
  2. 勘误等其他信息:https://www.oreilly.com/catalog/errata.csp?isbn=0636920158059

第 1 章 导言

  1. 类型安全:借助类型避免程序做无效的事情。
  2. 通过一个含有一些无效操作的 demo,简单对比一下 js、ts 分别是在什么阶段告诉你代码有问题的
  1. 3 + []
  2. let obj = {}
  3. obj.foo
  4. function a(b) {
  5. return b / 2
  6. }
  7. a("z")
  • js 需要等到代码运行时才会抛出错误
  • ts 在输入代码的过程中,文本编辑器会给出错误消息

第 2 章 TypeScript 概述

  1. 运行程序的步骤
    1. 把程序解析为 AST
    2. 把 AST 编译成字节码
    3. 运行时计算字节码
  2. ts 不直接编译成字节码,而是编译成 js 代码
  3. 类型检查器:用于检查代码是否符合类型安全要求的特殊程序。
  4. 运行 ts 的步骤
    1. TypeScript 源码 → TypeScript AST
    2. 类型检查器检查 AST
    3. TypeScript AST → JavaScript 源码
    4. JavaScript 源码 → JavaScript AST
    5. JavaScript AST → 字节码
    6. 运行时计算字节码
  5. 运行 ts 的前 3 步:tsc 的指责
  6. 运行 ts 的后 3 步:js 宿主环境的指责
  7. 运行 ts 的前 2 步才会用到 ts 的类型系统
  8. ts 的类型系统所提供的类型信息在第 3 步中生成的 js 源码中是不存在的
  9. 类型系统:类型检查器为程序分配类型时使用的一系列规则。
  10. 一般来说,类型系统有两种:
    1. 一种通过显式句法告诉编译器所有值的类型
    2. 另一种自动推导值的类型
  11. ts 身兼两种类型系统,可以显式注解类型,也可以让 ts 推导多数类型
  12. 【建议】非必要的情况下,不要显式地写类型注解
  1. let a: number = 1 // a 是一个数字
  2. let b: string = "hello" // b 是一个字符串
  3. let c: boolean[] = [true, false] // c 是一个布尔值数组
  4. // 即便你不显式地写明变量的类型,ts 也能根据赋的值推导出变量的类型
  5. let a = 1 // a 是 number
  6. let b = "hello" // b 是 string
  7. let c = [true, false] // c 是 boolean[]
  1. 比较 ts 和 js 的类型系统
类型系统特性 JavaScript TypeScript
类型是如何绑定的? 动态 静态
是否自动转换类型? 否(多数时候)
何时检查类型? 运行时 编译时
何时报告错误? 运行时(多数时候) 编译时(多数时候)

第 3 章 类型全解

第 4 章 函数

第 5 章 类和接口

第 6 章 类型进阶

第 7 章 处理错误

第 8 章 异步编程、并发和并行

第 9 章 前后端框架

第 10 章 命名空间和模块

第 11 章 与 JavaScript 互操作

第 12 章 构建和运行 TypeScript

第 13 章 总结