TS 概述
一、 编译器
概述地说,程序由一些文件构成,文件中是你编写的文本。这些文本由一个特殊的的程序(称为编译器)解析,转换成抽象句法树(AST)。AST是去掉空白,注释和缩进用的制表符或空格之后的数据结构。步骤如下:
- 把程序解析成AST。
- 把AST编译成字节码。
- 运行时计算字节码。
TypeScript的特殊之处在于,它不直接编译成字节码,而是编译成JavaScript代码。
其实,在这之间跳过了一个关键的步骤:TypeScript编译器生成AST之后,真正运行代码之前,TypeScript会对代码进行类型检查。(检查代码是否符合类型安全要求的特殊程序)
类型检查是TypeScript的魔力所在。有了这样一步,TypeScript才能保证程序能按预期正常运行,没有显而易见的错误。
TypeScript的编译过程大致为如下步骤:
-
TypeScript 源码 -> TypeScript AST
-
类型检查器检查AST
-
TypeScriptAST -> JavaScript源码
-
JavaScript源码 -> JavaScript AST
-
AST -> 字节码
-
运行时计算字节码
第1-3步由TSC操作,第4—6步由浏览器,NodeJS或其他JS引擎中的JS运行时操作
二、 类型系统
一般来说,类型系统有两种:一种通过显式句法告诉编译器所有值的类型,另一种自动推导值的类型。TypeScript身兼两种类型系统。
为了显示的告诉TypeScript你使用的类型需要使用世界。
let a: number = 1
let c: booleanp[] = [true, false]
如果想让TypeScript自动推导类型,去掉注解即可。
TypeScript VS. JavScript
| 类型系统特性 | JavaScript | TypeScript |
|---|---|---|
| 类型如何绑定的 | 动态 | 静态 |
| 是否自动转换类型 | 是 | 否 |
| 何时检查类型 | 运行时 | 编译时 |
| 何时报告错误 | 运行时 | 编译时 |
- 类型是如何绑定的?
JavaScript动态绑定类型。因此必须运行程序才能知道类型,在运行程序之前,JS对类型一无所知。
TypeScript是渐进式类型语言。这意味着,在编译时知道所有类型能让TypeScript充分发挥作用,但在编译之前,并不需要知道全部类型。 3. 是否自动转换类型? JavaScript 是弱类型语言。如果执行无效的操作,例如计算一个数组和一个数字的和,会得到一个字符串。但是TypeScript会报错。
- 何时检查类型?
多数情况下,JavaScript不在乎你使用的是什么类型,它会尽自己所能把你提供的值转换成预期的类型。
而TypeScript会在编译时对代码做类型检查。 7. 何时报告错误?
JavaScript 在运行时抛出异常或执行隐式类型转换。这意味着,必须真正运行程序才能知道有些操作是无效的。最好的情况是,单元测试发现了错误;最坏的情况,用户发现!
TypeScript在编译时包括句法和类型相关的错误。这些代码会在编译器中显示,输入代码后立即就有反馈。