Introdução ao ts-morph: o que é e para que serve
\n\nts-morph é uma biblioteca poderosa para trabalhar programaticamente com a Árvore Sintática Abstrata (AST) do TypeScript. Ela fornece uma API conveniente e intuitiva para análise, modificação e geração de código TypeScript. Ao contrário do uso direto do compilador TypeScript (TypeScript Compiler API), o ts-morph oferece uma interface de nível mais alto que simplifica significativamente muitas tarefas rotineiras.
\n\nPara que serve esta biblioteca? Imagine que você precisa:
\n- \n
- Refatoração de código: Renomear automaticamente todas as ocorrências de uma função, alterar a assinatura de um método ou mover uma classe para outro arquivo. \n
- Análise estática: Encontrar todas as variáveis não utilizadas, verificar a conformidade com as regras de codificação corporativas ou coletar metadados sobre a estrutura do projeto. \n
- Geração de código: Criar tipos com base em um esquema JSON, gerar operações CRUD para um banco de dados ou adicionar documentação automaticamente. \n
- Criação de ferramentas de desenvolvimento: Escrever um plugin para linter, um gerador de documentação personalizado ou um utilitário para migração de código. \n
O ts-morph abstrai a complexidade do TypeScript Compiler API, fornecendo uma abordagem orientada a objetos. Você trabalha com projetos, arquivos, classes, funções e outros elementos de código como objetos comuns, em vez de nós AST de baixo nível.
\n\nInstalação do ts-morph
\n\nA instalação da biblioteca é feita via npm ou yarn. Ela está disponível como um pacote para Node.js.
\n\nnpm install ts-morph\n\nou, se você usa yarn:
\n\nyarn add ts-morph\n\nApós a instalação, você pode importar a biblioteca no seu projeto:
\n\nimport { Project } from 'ts-morph';\n\nPara funcionar, o ts-morph requer o TypeScript (indicado como peer dependency). Certifique-se de que o TypeScript está instalado no seu projeto:
\n\nnpm install typescript\n\nInício rápido com exemplo de código
\n\nVamos escrever um script simples que cria um novo arquivo TypeScript, adiciona uma função a ele e, em seguida, exibe o código gerado.
\n\nimport { Project, SyntaxKind } from 'ts-morph';\n\n// Cria um novo projeto\nconst project = new Project({\n useInMemoryFileSystem: true, // Trabalha na memória, sem salvar no disco\n});\n\n// Cria um novo arquivo\nconst sourceFile = project.createSourceFile('example.ts', '');\n\n// Adiciona uma função\nconst functionDeclaration = sourceFile.addFunction({\n name: 'greet',\n parameters: [{ name: 'name', type: 'string' }],\n returnType: 'string',\n statements: [\n `return \\`Hello, \\${name}!\\`;`,\n ],\n});\n\n// Adiciona um comentário JSDoc\nfunctionDeclaration.addJsDoc({\n description: 'Sauda o usuário',\n tags: [{ tagName: 'param', text: 'name - Nome do usuário' }],\n});\n\n// Exibe o código gerado\nconsole.log(sourceFile.getText());\n\n\nResultado da execução do script:
\n\n/**\n * Sauda o usuário\n * @param name - Nome do usuário\n */\nfunction greet(name: string): string {\n return `Hello, ${name}!`;\n}\n\n\nComo você pode ver, criamos programaticamente uma função completa com documentação JSDoc. Isso é apenas uma pequena parte das capacidades do ts-morph.
\n\nPrincipais métodos e funções do ts-morph
\n\nVamos examinar 10 métodos-chave da biblioteca com descrição detalhada e exemplos.
\n\n1. Project.createSourceFile()
\nO que faz: Cria um novo arquivo fonte TypeScript no projeto. O arquivo pode estar vazio ou conter código inicial.
\nParâmetros:
\n- \n
filePath: string— caminho para o arquivo (relativo à raiz do projeto). \n sourceText?: string— conteúdo inicial do arquivo (opcional).