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.

Relaterede artikler