TypeScript 编译过程中的主要步骤(简要)

50 阅读2分钟
  1. 源码输入:这是整个编译过程的起点,即您编写的 TypeScript 代码文件。

  2. 扫描器(Scanner) => 词法分析:扫描器将源代码分解为一系列的词法单元(Tokens),例如标识符、关键字、运算符、字符串等。这一过程类似于将文本分解为有意义的基本元素。

  3. 解析器(Parser) => 生成抽象语法树(AST) :解析器接收词法单元流,并根据 TypeScript 的语法规则构建抽象语法树(Abstract Syntax Tree)。AST 以树状结构表示代码的结构和逻辑。

  4. 绑定器(Binder) => 符号绑定和作用域解析:在这个阶段,会进行符号的绑定和作用域的解析。它将变量、函数、类等符号与它们的定义和作用域进行关联,以便后续的类型检查和代码生成能够正确理解代码的语义。

  5. 校验器(Checker) => 类型检查:校验器会对 AST 进行类型检查,确保代码中的类型使用符合 TypeScript 的类型规则。如果存在类型错误,会给出相应的错误提示。

  6. 发射器(Emitter) => 生成 JavaScript 代码:最后,发射器将经过类型检查和处理的 AST 转换为等效的 JavaScript 代码。

上面只是一个简化的概述,TypeScript 的编译过程实际非常复杂,还涉及到许多优化、模块解析、装饰器处理等细节。

例如,在类型检查阶段,如果尝试将一个字符串赋值给一个期望为数字的变量,校验器会检测到类型不匹配并报告错误。在代码生成阶段,如果使用了 TypeScript 的高级特性,如类型别名或枚举,发射器会将其转换为 JavaScript 中相应的可执行代码。