typescript - TS-Morph, Är det möjligt att manipulera blocknod för att lägga till instruktioner?
Jag vill dynamiskt lägga till uttalanden inuti en asynkron pilfunktion inuti en klass; jag läste dokumentationen och jag hittade ingenting som kunde hjälpa mig, jag kunde bara få blocknoden där jag vill infoga mina uttalanden. Finns det något rent sätt att få det att hända?
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('...') ???
Svar #1
Det finns en metod som kallas "addStatements" som exakt passar dina behov.
Metod 1: Ren text
Du kan antingen lägga till uttalanden som vanlig text:
block.addStatements(
[
"console.log('hello');",
"",
"console.log('world');"
]);
Metod 2: Kompilatornoder
Om du inte bryr dig om att koden formateras därefter, kan du också använda ts-morphs printNode-metod:
import { printNode, ts } from "ts-morph";
// [...]
block.addStatements(
[
printNode(ts.factory.createNewExpression(ts.factory.createIdentifier("Array"))
]);
Metod 3: Noder Förberedda i En Annan Fil
Eller, för att hålla din kod formaterad, kan du också förbereda uttalandena i en annan fil och lägga till den i blocket efteråt.
let file = project.createSourceFile("temp.ts");
let varStatement = file.addVariableDeclaration(/* [...] */);
block.addStatements(
[
varStatement.getFullText()
]);
