TypeScript Compiler API avansert bruk og eksempler

TypeScript Compiler API gir kraftige verktøy for programmatisk interaksjon med TypeScript-kode. Det lar utviklere analysere, transformere og generere TypeScript-kode på sofistikerte måter. Denne artikkelen fordyper seg i avanserte bruksscenarier og eksempler for å illustrere egenskapene til TypeScript Compiler API.

Komme i gang med TypeScript Compiler API

Før du går inn i avansert bruk, er det viktig å sette opp TypeScript Compiler API. Dette innebærer å installere TypeScript og skrive et grunnleggende skript for å samhandle med API.

import * as ts from 'typescript';

const sourceCode = `let x: number = 1;`;
const sourceFile = ts.createSourceFile('example.ts', sourceCode, ts.ScriptTarget.ES2015);

console.log(sourceFile.text);

Parsing TypeScript-kode

Compiler API gjør det mulig å analysere TypeScript-kode til et abstrakt syntakstre (AST). Dette kan være nyttig for kodeanalyse og transformasjonsoppgaver.

const sourceFile = ts.createSourceFile('example.ts', sourceCode, ts.ScriptTarget.ES2015);

function visit(node: ts.Node) {
  if (ts.isVariableDeclaration(node)) {
    console.log(`Variable name: ${node.name.getText()}`);
  }
  ts.forEachChild(node, visit);
}

visit(sourceFile);

Transformering av TypeScript-kode

API-en gir verktøy for å transformere TypeScript-kode. Dette eksemplet viser hvordan du bruker en transformator til å endre kode.

function transformer<T extends ts.Node>(context: ts.TransformationContext) {
  function visit(node: T): T {
    if (ts.isVariableDeclaration(node)) {
      return ts.updateVariableDeclaration(node, node.name, node.type, ts.createLiteral(42)) as T;
    }
    return ts.visitEachChild(node, visit, context);
  }
  return (rootNode: T) => ts.visitNode(rootNode, visit);
}

const result = ts.transform(sourceFile, [transformer]);
const printer = ts.createPrinter();
const transformedCode = printer.printFile(result.transformed[0] as ts.SourceFile);

console.log(transformedCode);

Genererer TypeScript-kode

Generering av TypeScript-kode programmatisk er en annen kraftig funksjon i API. Her er et eksempel på hvordan du oppretter en ny TypeScript-fil fra bunnen av.

const newSourceFile = ts.createSourceFile(
  'newFile.ts',
  `const greeting: string = 'Hello, TypeScript!';`,
  ts.ScriptTarget.ES2015
);

const printer = ts.createPrinter();
const newCode = printer.printFile(newSourceFile);

console.log(newCode);

Håndtering av diagnostikk og feil

Compiler API gir mekanismer for håndtering av diagnostikk og feil. Dette eksemplet viser hvordan du bruker diagnostikk til å rapportere problemer i TypeScript-kode.

const program = ts.createProgram(['example.ts'], {});
const diagnostics = ts.getPreEmitDiagnostics(program);

diagnostics.forEach(diagnostic => {
  const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
  console.log(`Error: ${message}`);
});

Konklusjon

TypeScript Compiler API tilbyr et rikt sett med funksjoner for å arbeide med TypeScript-kode programmatisk. Ved å mestre disse avanserte egenskapene kan utviklere lage kraftige verktøy for å analysere, transformere og generere TypeScript-kode, noe som fører til mer effektive og fleksible utviklingsarbeidsflyter.