该部分为官方Wiki的翻译(部分),列出阅读源码时的必要知识。完整翻译请参考
部分带中文的源码(应该只会ahead of microsoft:master),请参考
重要名词:
Note: 这些不是一类名词(如:Node是一个interface,而Parser既是interface也是一个文件,Standalone compiler甚至只是一个抽象),但都需要了解
Parser: 获取sources, 遵从语言语法, 生成抽象语法树 (AST)
Binder: 使用Symbol链接有关联的声明到同一结构 (e.g. 同一接口或模块的不同声明, 或者有同一名字的函数和模块). 这使得类型系统可以对这些命名声明进行推断.
Type resolver/ Checker: 解析每个构造(construct)的类型, 检查语义操作并生成适当的诊断程序.
Emitter: 从一组输入文件(.ts和.d.ts)生成的输出可以是以下之一: JavaScript(.js),定义(.d.ts)或源映射(.js.map).
Pre-processor: “编译上下文”(Compilation Context)是指“程序”("program")中涉及的所有文件. 通过按顺序检查在命令行中传递给编译器的所有文件, 然后添加使用import语句和/// 标记直接或间接引用的所有文件, 来创建上下文. 遍历参考图(the reference graph)的结果是构成程序的源文件的有序列表. 解决导入时,优先处理“.ts”文件而不是“.d.ts”文件,以确保处理的是最新文件. 编译器执行类似节点的过程来解析导入, 其方法是在目录链中向上查找(walking up the directory chain)以扩展名为.ts或.d.ts的源文件来匹配请求的导入. 导入解析失败不会导致错误,因为可能已经声明了环境模块(ambient module).
Standalone compiler (tsc): 批处理编译CLI. 主要处理读取和写入文件, 以支持不同的引擎(例如Node.js).
Language Service: 其在核心编译器的管道周围公开了一个附加层,该层用于编辑器类应用程序. 语言服务支持一组常见的典型编辑器操作,如语句补全、帮助签名(signature help)、代码格式化和大纲(outlining)、着色、基本的重构(如重命名), 调试接口助手(如验证断点)以及TypeScript特有的功能(如支持增量编译)(相当于命令行上的--watch)等... 其旨在高效地处理在长期编译中随时可能发生上下文变化的源文件; 从这层意义上说, Language Service在处理程序和源文件方面提供了一个与其他编译器接口稍有些不同的视角(slightly different perspective).
Node: 抽象语法树(AST)的基本组件. 一般而言, Node代表语言语法中的非终结符; 一些终结符保存在树中, 例如标识符和常量(identifiers and literals).
SourceFile: 给定源文件的AST. SourceFile本身就是一个节点; 它提供了一组额外的接口来访问文件的原始文本、文件中的引用、文件中的标识符列表以及从文件中的位置到行和字符号(line and character numbers)的映射.
Program: SourceFiles和一组表示编译单元的编译选项的集合. 该Program是类型系统和代码生成的主要入口.
Symbol: 一个命名了的声明. Symbols作为绑定的结果(a result of binding)而创建. Simbols将树中声明的节点连接到对同一实体有贡献的其他声明. Symbols是语义系统的基本组成部分.
Type: Types是语义系统的另一部分. Types可以被命名(如类和接口), 也可以匿名(例如 对象类型).
Signature: 该语言有三种类型的签名: 调用(call), 构造(construct)和索引(index)签名.
System: 操作环境OE(编译器与操作系统的交互)
Trivia: 表示源文本中对于正常理解代码来说不太重要的部分, 如空白、注释甚至冲突标记.
Full Start/Token Start: Tokens本身具有我们所说的“full start”和“token start”. “token start”是更自然化的版本, 它是文件中令牌文本(text of token)开始的位置. 而“full start”是自上一个有效token以来扫描程序需要开始扫描的点(point at). 当涉及琐事(trivia)时, 我们通常更关心的是full start.