typescript - TS-Morph,是否有可能操作块节点以添加语句?
我想在类中的异步箭头函数内动态添加语句;我阅读了文档,但没有找到任何可以帮助我的内容,我只能获取到我想要插入语句的块节点。有任何干净的方法可以实现吗?
import {SyntaxKind, ArrowFunction, Block} from "ts-morph";
//
// .....
//
let methodBody = `methodName = async(arg) => { }`;
serviceClass.addMember(methodBody);
let method = serviceClass.getMemberOrThrow('methodName');
let arrowFunction =method.getDescendantsOfKind(SyntaxKind.ArrowFunction)[0];
let block =arrowFunction.getDescendantsOfKind(SyntaxKind.Block)[0];
///
/// block.addStatement('...') ???
答案#1
有一种名为“addStatements”的方法,正好符合你的需求。
方法 1:纯文本
你可以将语句作为纯文本添加:
block.addStatements(
[
"console.log('hello');",
"",
"console.log('world');"
]);
方法 2:编译器节点
如果你不在意代码是否按相应格式排版,你也可以使用 ts-morph 的 printNode 方法:
import { printNode, ts } from "ts-morph";
// [...]
block.addStatements(
[
printNode(ts.factory.createNewExpression(ts.factory.createIdentifier("Array"))
]);
方法 3:在另一个文件中准备的节点
或者,为了保持代码格式,你也可以在另一个文件中准备这些语句,然后再将其添加到代码块中。
let file = project.createSourceFile("temp.ts");
let varStatement = file.addVariableDeclaration(/* [...] */);
block.addStatements(
[
varStatement.getFullText()
]);
