Hvordan genererer man global ejendomstilgangsudtryk med Typescript Compiler API?
Jeg forsøger at generere noget TypeScript-kode ved hjælp af compiler-API'en. Desværre er officiel (eller nogen som helst) dokumentation sparsom, og jeg er nu fuldstændig fastlåst i en meget simpel opgave:
Jeg vil generere et simpelt funktionskald som foo(). Det er alt, et simpelt globalt funktionskald.
Efter en lang søgen er jeg nået så langt:
import ts from 'typescript'
ts.createCall(
ts.createPropertyAccess(
*some expression*,
'foo'
),
undefined, //generics
[], //parameters
);
Så vidt jeg forstår, skal jeg videregive et udtryk til createPropertyAccess for at være 'ejeren' af den adgangne egenskab (som foo i foo.bar). Men i dette tilfælde er der ingen 'ejer', fordi funktionen befinder sig i det globale område.
Er der en måde at generere et sådant funktionskald på? Jeg prøvede at bruge ts.createOmittedExpression, men det genererede følgende kode:
().bar();
Svar #1
I dette scenarie kan du bare bruge ts.createIdentifier. Der er ingen egenskabsadgangsudtryk i foo().
const statement = ts.createExpressionStatement(
ts.createCall(ts.createIdentifier("foo"), undefined, undefined)
);
Forresten, tjek min side ts-ast-viewer. Den vil nu vise compiler API-koden, der vil skabe koden i editoren.
