如何使用编译器API将Typescript转换为Typescript?

时间:2019-04-29 15:52:06

标签: typescript typescript-compiler-api

我想构建一个工具来对打字稿代码进行转换,并将其作为打字稿(而不是JavaScript)发出,作为现有代码库一次性升级路径的一部分。这可能吗?如果可以,怎么办?我没有找到关于编译器API的全面而清晰的参考。任何引用或实际代码的指针都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

  1. 使用ts.createSourceFile解析所有源文件-为每个文件创建AST / ts.SourceFile
  2. 使用ts.transform转换每个源文件。为此提供您要使用的转换。
  3. 使用ts.createPrinter创建打印机并打印出转换后的源文件。
  4. 将打印的源文件写入文件系统。

我的答案here中包含一些示例代码。

替代

要注意上述解决方案的重要一点是,当打印机打印AST时,大部分时候将以自己的格式打印。

如果您要维护文件的格式,则可能需要执行以下操作:

  1. 将所有源文件解析为AST(与上面的#1相同)。
  2. 遍历所有AST,并创建文件文本更改的集合以在文件上执行。您可能要构建的示例数据结构可能类似于在编译器API中找到的数据结构FileTextChanges
  3. 直接基于这些文件文本更改来操纵文本。
  4. 将每个文件的文本保存到文件系统中。

替代2

由于您只能在代码库中执行一次此操作,因此您可以使用我的库ts-morph来节省大量时间。