一 聊聊typescript的核心原理
TypeScript
是一种基于 JavaScript
的强类型编程语言,它使得在前端项目开发过程中更加严谨且流畅,一定程度上保证了大型前端项目程序的健壮性。
但是 TypeScript
并不可以直接运行,而是需要转换成 JavaScript
代码才可以在 Node.js
或浏览器环境下执行,因此我们需要通过“编译器”将 TS 代码转换为 JS 代码。
Scanner
扫描器:词法分析,生成token流
Parser
解析器:生成AST
Binder
绑定器:创建Symbol关联AST,形成语义
Checker
检查器:类型检查
Emitter
发射器:输出编译后的文件
- 对于源代码,TS首先对它进行词法分析,通过scanner进行逐词扫描,生成token流
- 对于scanner生成的token,parser会对其进行组装并生成一棵AST
- binder会生成symbol(符号),并为AST上的每一个节点绑上相应的symbol
- checker检查处理后的AST,利用其进行语法检查
- emitter根据最终的AST生成JS代码和声明文件(d.ts)
二 盘点typescript的常用类型类型特点
1.const
防止变量值被修改,readOnly
防止变量的属性被修改。
2.TypeScript
中any、never、unknown、null & undefined 和 void
有什么区别?
any
可以定义任意变量动态变量(失去了检查作用)。
never
可以定义抛出异常或用不存在的类型。
unknown
任何值都可赋值给unknown
类型,但unknown
只能复制给unknown
和any
。
void 没有任何类型
null & undefined
默认情况下这两个是所有类型的子类型,但是当你指定了 --strictNullChecks