TypeScript 读书笔记

192 阅读3分钟

TS 概述

一、 编译器


概述地说,程序由一些文件构成,文件中是你编写的文本。这些文本由一个特殊的的程序(称为编译器)解析,转换成抽象句法树(AST)。AST是去掉空白,注释和缩进用的制表符或空格之后的数据结构。步骤如下:

  1. 把程序解析成AST。
  2. 把AST编译成字节码。
  3. 运行时计算字节码。

TypeScript的特殊之处在于,它不直接编译成字节码,而是编译成JavaScript代码。

其实,在这之间跳过了一个关键的步骤:TypeScript编译器生成AST之后,真正运行代码之前,TypeScript会对代码进行类型检查。(检查代码是否符合类型安全要求的特殊程序)

类型检查是TypeScript的魔力所在。有了这样一步,TypeScript才能保证程序能按预期正常运行,没有显而易见的错误。


TypeScript的编译过程大致为如下步骤:

  1. TypeScript 源码 -> TypeScript AST

  2. 类型检查器检查AST

  3. TypeScriptAST -> JavaScript源码

  4. JavaScript源码 -> JavaScript AST

  5. AST -> 字节码

  6. 运行时计算字节码

第1-3步由TSC操作,第4—6步由浏览器,NodeJS或其他JS引擎中的JS运行时操作

二、 类型系统


一般来说,类型系统有两种:一种通过显式句法告诉编译器所有值的类型,另一种自动推导值的类型。TypeScript身兼两种类型系统。

为了显示的告诉TypeScript你使用的类型需要使用世界。

let a: number = 1
let c: booleanp[] = [true, false]

如果想让TypeScript自动推导类型,去掉注解即可。


TypeScript VS. JavScript

类型系统特性JavaScriptTypeScript
类型如何绑定的动态静态
是否自动转换类型
何时检查类型运行时编译时
何时报告错误运行时编译时
  1. 类型是如何绑定的?

JavaScript动态绑定类型。因此必须运行程序才能知道类型,在运行程序之前,JS对类型一无所知。

TypeScript是渐进式类型语言。这意味着,在编译时知道所有类型能让TypeScript充分发挥作用,但在编译之前,并不需要知道全部类型。 3. 是否自动转换类型? JavaScript 是弱类型语言。如果执行无效的操作,例如计算一个数组和一个数字的和,会得到一个字符串。但是TypeScript会报错。

  1. 何时检查类型?

多数情况下,JavaScript不在乎你使用的是什么类型,它会尽自己所能把你提供的值转换成预期的类型。

而TypeScript会在编译时对代码做类型检查。 7. 何时报告错误?

JavaScript 在运行时抛出异常或执行隐式类型转换。这意味着,必须真正运行程序才能知道有些操作是无效的。最好的情况是,单元测试发现了错误;最坏的情况,用户发现!

TypeScript在编译时包括句法和类型相关的错误。这些代码会在编译器中显示,输入代码后立即就有反馈。