Percorrendo o AST com visitantes
Percorra os nós da árvore sintática para analisar a estrutura do código
Percorrendo o AST com visitantes é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.
O que é a AST?
O TypeScript analisa o código-fonte em uma Árvore de Sintaxe Abstrata (AST) — uma árvore de nós que representam construções da linguagem, como variáveis, funções e expressões.
import ts from "typescript";
const sf = ts.createSourceFile(
"example.ts",
"const x = 1;",
ts.ScriptTarget.Latest
);Tipos de nós
Cada nó da AST tem uma propriedade kind, um valor de enumeração ts.SyntaxKind, que indica o que ele representa.
import ts from "typescript";
// Common kinds:
// ts.SyntaxKind.VariableDeclaration
// ts.SyntaxKind.FunctionDeclaration
// ts.SyntaxKind.IdentifierVisitando com forEachChild
ts.forEachChild(node, visitor) chama seu visitante para cada filho direto de um nó. Use recursão para percorrer a árvore inteira.
function visit(node: ts.Node) {
if (ts.isFunctionDeclaration(node)) {
console.log("Function:", node.name?.text);
}
ts.forEachChild(node, visit);
}
visit(sourceFile);Funções de proteção de tipos
O TypeScript fornece funções de proteção de tipos, como ts.isVariableDeclaration e ts.isFunctionDeclaration, para restringir nós com segurança.
ts.forEachChild(sf, node => {
if (ts.isClassDeclaration(node)) {
console.log("Class:", node.name?.getText());
}
if (ts.isInterfaceDeclaration(node)) {
console.log("Interface:", node.name.getText());
}
});Obtendo o texto de um nó
Use node.getText(sourceFile) para recuperar o texto exato do código-fonte de um nó ou node.getFullText() para incluir informações triviais.
ts.forEachChild(sf, node => {
if (ts.isIdentifier(node)) {
console.log("Id:", node.text);
}
});Posições dos nós
Cada nó tem posições pos e end, que são deslocamentos de caracteres usados para localizar nós no código-fonte.
ts.forEachChild(sf, node => {
console.log(node.kind, "at", node.pos, "-", node.end);
});Percorrendo com um auxiliar recursivo
Uma ferramenta comum é uma função walk que aplica recursivamente um visitante a cada nó da árvore.
function walk(node: ts.Node, visitor: (n: ts.Node) => void) {
visitor(node);
ts.forEachChild(node, child => walk(child, visitor));
}Encontrando todas as chamadas de função
Use uma caminhada recursiva para encontrar todas as expressões de chamada em um arquivo de origem — útil para detectar o uso de APIs.
walk(sf, node => {
if (ts.isCallExpression(node)) {
const expr = node.expression.getText(sf);
console.log("Call:", expr);
}
});Acessando nós pais
Os nós da AST não têm um ponteiro para o pai por padrão. Chame ts.setParent(sourceFile) ou use program.getSourceFile, que define os pais automaticamente para os programas.
// For manually created source files:
// (ts as any).setParents(sf);Usando o TypeChecker com nós
Combine a travessia da AST com o verificador de tipos para resolver o tipo TypeScript de qualquer nó de expressão.
const checker = program.getTypeChecker();
walk(sf, node => {
if (ts.isExpression(node)) {
const type = checker.getTypeAtLocation(node);
console.log(checker.typeToString(type));
}
});Recapitulação: travessia da AST
Percorra a AST do TypeScript com forEachChild e funções de guarda de tipo. Combine isso com o verificador de tipos para criar ferramentas avançadas de análise estática e geração de código.
Verificação rápida
Qual função visita recursivamente os nós filhos da AST do TypeScript?
O que você aprendeu
A travessia da AST usa ts.forEachChild e funções de guarda de tipo para percorrer e inspecionar cada nó em um arquivo TypeScript. Combinada com o verificador de tipos, ela permite criar analisadores de código, ferramentas de análise e ferramentas de refatoração.
Aprenda TypeScript com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 101
- Aulas
- 352
Perguntas Frequentes
A aula “Percorrendo o AST com visitantes” é grátis?
Sim — o texto completo de “Percorrendo o AST com visitantes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.
O que vou aprender em “Percorrendo o AST com visitantes”?
Percorra os nós da árvore sintática para analisar a estrutura do código Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar TypeScript Academy?
Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Percorrendo o AST com visitantes”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de TypeScript Academy?
Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Criando um programa TypeScript com a API
- Percorrendo o AST com visitantes
- Transformadores personalizados e geração de código
- Construindo uma ferramenta simples de análise de código