0Pricing
TypeScript Academy · Lektion

Den AST mit Visitor-Funktionen durchlaufen

Durchlaufen Sie Knoten des Syntaxbaums, um die Code-Struktur zu analysieren.

Den AST mit Visitor-Funktionen durchlaufen ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist der AST?

TypeScript analysiert Quellcode und erstellt daraus einen Abstract Syntax Tree (AST) – einen Baum aus Knoten, die Sprachkonstrukte wie Variablen, Funktionen und Ausdrücke darstellen.

import ts from "typescript";
const sf = ts.createSourceFile(
  "example.ts",
  "const x = 1;",
  ts.ScriptTarget.Latest
);

Knotentypen

Jeder AST-Knoten besitzt eine kind-Eigenschaft (einen Enum-Wert von ts.SyntaxKind), die angibt, was er darstellt.

import ts from "typescript";
// Common kinds:
// ts.SyntaxKind.VariableDeclaration
// ts.SyntaxKind.FunctionDeclaration
// ts.SyntaxKind.Identifier

Mit forEachChild navigieren

ts.forEachChild(node, visitor) ruft Ihren Visitor für jedes direkte Kindelement eines Knotens auf. Verwenden Sie Rekursion, um den gesamten Baum zu durchlaufen.

function visit(node: ts.Node) {
  if (ts.isFunctionDeclaration(node)) {
    console.log("Function:", node.name?.text);
  }
  ts.forEachChild(node, visit);
}
visit(sourceFile);

Funktionen zur Typprüfung

TypeScript stellt Funktionen zur Typprüfung wie ts.isVariableDeclaration und ts.isFunctionDeclaration für eine sichere Eingrenzung von Knotentypen bereit.

ts.forEachChild(sf, node => {
  if (ts.isClassDeclaration(node)) {
    console.log("Class:", node.name?.getText());
  }
  if (ts.isInterfaceDeclaration(node)) {
    console.log("Interface:", node.name.getText());
  }
});

Knotentext abrufen

Verwenden Sie node.getText(sourceFile), um den exakten Quelltext eines Knotens abzurufen, oder node.getFullText(), um auch Trivialtext einzuschließen.

ts.forEachChild(sf, node => {
  if (ts.isIdentifier(node)) {
    console.log("Id:", node.text);
  }
});

Knotenpositionen

Jeder Knoten besitzt die Positionen pos und end (Zeichen-Offsets), mit denen Sie Knoten im Quelltext lokalisieren können.

ts.forEachChild(sf, node => {
  console.log(node.kind, "at", node.pos, "-", node.end);
});

Mit einer rekursiven Hilfsfunktion durchlaufen

Eine häufig verwendete Hilfsfunktion ist eine walk-Funktion, die einen Visitor rekursiv auf jeden Knoten im Baum anwendet.

function walk(node: ts.Node, visitor: (n: ts.Node) => void) {
  visitor(node);
  ts.forEachChild(node, child => walk(child, visitor));
}

Alle Funktionsaufrufe finden

Verwenden Sie ein rekursives Durchlaufen, um alle Aufrufausdrücke in einer Quelldatei zu finden – nützlich zum Erkennen der API-Nutzung.

walk(sf, node => {
  if (ts.isCallExpression(node)) {
    const expr = node.expression.getText(sf);
    console.log("Call:", expr);
  }
});

Auf übergeordnete Knoten zugreifen

AST-Knoten verfügen standardmäßig nicht über einen Verweis auf ihren übergeordneten Knoten. Rufen Sie ts.setParent(sourceFile) auf oder verwenden Sie program.getSourceFile, das bei Programmen übergeordnete Knoten automatisch setzt.

// For manually created source files:
// (ts as any).setParents(sf);

Den TypeChecker mit Knoten verwenden

Kombinieren Sie die AST-Traversierung mit dem TypeChecker, um den TypeScript-Typ eines beliebigen Ausdrucksknotens zu bestimmen.

const checker = program.getTypeChecker();
walk(sf, node => {
  if (ts.isExpression(node)) {
    const type = checker.getTypeAtLocation(node);
    console.log(checker.typeToString(type));
  }
});

Zusammenfassung: AST-Traversierung

Durchlaufen Sie den TypeScript-AST mit forEachChild und Type-Guard-Funktionen. Kombinieren Sie dies mit dem TypeChecker, um leistungsfähige Tools für statische Analyse und Codegenerierung zu erstellen.

Schnelltest

Welche Funktion besucht rekursiv die untergeordneten Knoten im TypeScript-AST?

Das haben Sie gelernt

Bei der AST-Traversierung werden ts.forEachChild und Type-Guard-Funktionen verwendet, um jeden Knoten in einer TypeScript-Datei zu durchlaufen und zu untersuchen. In Kombination mit dem TypeChecker ermöglicht dies Linter, Codeanalyse- und Refactoring-Tools.

Häufig gestellte Fragen

Ist die Lektion „Den AST mit Visitor-Funktionen durchlaufen“ kostenlos?

Ja — der vollständige Text von „Den AST mit Visitor-Funktionen durchlaufen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Den AST mit Visitor-Funktionen durchlaufen“?

Durchlaufen Sie Knoten des Syntaxbaums, um die Code-Struktur zu analysieren. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um TypeScript Academy zu starten?

Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Den AST mit Visitor-Funktionen durchlaufen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?

Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Ein TypeScript-Programm mit der API erstellen
  2. Den AST mit Visitor-Funktionen durchlaufen
  3. Benutzerdefinierte Transformer und Codegenerierung
  4. Ein einfaches Linting-Tool erstellen
← Zurück zu TypeScript Academy