【发布时间】:2017-06-10 09:30:11
【问题描述】:
我正在尝试了解 TypeScript 中模块解析的过程。
假设我有两个文件。 A.ts 和 B.ts,“A”导入“B”。
模块分辨率如何工作?什么时候 ? (在编译阶段)。
在解析每个文件并构建两个 AST 之后。编译器的下一阶段是什么?
它如何知道从文件“A”中的文件“B”中解析变量(或类型)?
我有两个假设:
1.它查看文件“B”的符号表,并进行类型检查。
2.合并AST 到一棵树中? (整个节目)
根据这些假设,我也很想知道代码生成如何受到影响。
1.如果第一个假设是正确的,那么代码生成会更复杂.因为你需要根据依赖的顺序来生成JS代码。 (它如何检测导入周期?如果 A 导入 B,反之亦然)。
2. 如果第二个假设是正确的,我觉得代码生成会更容易做。
但我假设它需要在生成代码之前对模块进行“拓扑排序”。
提前致谢。
【问题讨论】:
标签: typescript compiler-construction transpiler