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.IdentifierMit 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
- Ein TypeScript-Programm mit der API erstellen
- Den AST mit Visitor-Funktionen durchlaufen
- Benutzerdefinierte Transformer und Codegenerierung
- Ein einfaches Linting-Tool erstellen