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

sno*_*ort 4 typescript typescript-compiler-api

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

Dav*_*ret 9

您可以执行以下操作:

  1. 使用ts.createSourceFile-ts.SourceFile为每个文件创建一个 AST/来解析所有源文件。
  2. 使用ts.transform. 将此与您的转换一起使用。
  3. ts.createPrinter创建打印机和打印出的转化源文件。
  4. 将打印的源文件写入文件系统。

一些示例代码在我的答案中 在这里

选择

关于上述解决方案需要注意的重要一点是,当打印机打印 AST 时,它会在大部分情况下使用自己的格式进行打印。

如果要在文件中保持格式,则可能需要执行以下操作:

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

一个例子是在我的答案在这里

备选方案 2

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