插入任意文本并在TypeScript编译器API中修改NodeArrays

时间:2017-06-05 06:43:43

标签: typescript typescript-compiler-api

// Input
class Foo {
    templateString = 'some value';
}

// Output
import __LIB__ from '@scope/lib/path/to/lib';

class Foo {
    templateString = (function compiledTemplate(deps) {
        // ...
        return result;
    })({lib: __LIB__});
}

事实上,我有两个问题:

  1. 如何从字符串创建AST片段?
  2. 如何添加导入?
  3. P.S。 I tried各种方法createSourceFilets.createImportDeclaration,但它们都导致了这个或那个错误:[

1 个答案:

答案 0 :(得分:1)

要添加任意文本,我所知道的最好方法是将int与要插入的字符串一起使用。

要添加导入语句,请记住您在不使更改原始文件的情况下更新树

createIdentifier API采用ts.visitEachChild参数,该参数专门针对nodesVisitor运行。通常情况下,如果您未通过NodeArray,则会使用您为nodesVisitor参数传递的第一个回调对Node中的每个NodeArray进行操作,但在这里你特别想要在整个节点阵列上运行。

在您的情况下,您对visitor的语句(SourceFile感兴趣。您可以使用NodeArray<Statement>创建导入,并更新createImportDeclaration传递SourceFile,如下所示:

nodesVisitor