tsc vs Babel: qual usar para compilar TypeScript no CI?
O tsc verifica tipos e emite JavaScript; o Babel apenas remove tipos e transpila rápido - então muitos pipelines usam os dois, para trabalhos diferentes.
O tsc é o compilador do TypeScript: ele verifica tipos e pode emitir JavaScript. O Babel (com o preset de TypeScript) remove tipos e transpila rapidamente, mas não verifica tipos. Eles resolvem problemas sobrepostos, porém distintos.
| tsc | Babel | |
|---|---|---|
| Verificação de tipos | Sim | Não (apenas remove tipos) |
| Velocidade de emissão | Mais lenta | Rápida |
| Informação de tipos entre arquivos | Sim | Não (transformação por arquivo) |
| Plugins / transformações | Limitados | Grande ecossistema de plugins |
| Papel típico no CI | Verificação de tipos (--noEmit) | Transpilação rápida no bundler |
No CI
Um padrão comum e rápido é deixar um transpiler rápido (Babel, esbuild ou SWC) emitir JavaScript enquanto se executa tsc --noEmit apenas para verificação de tipos. O tsc sozinho é a ferramenta única mais segura porque ele tanto checa quanto emite, mas é mais lento. O Babel sozinho é rápido, mas não consegue detectar erros de tipo - então uma etapa separada de tsc --noEmit é essencial se você depende do Babel para a emissão.
Deixe mais rápido
Execute a verificação de tipos (tsc --noEmit) e o build em jobs paralelos, e faça cache das dependências e do build info do TS. Ambos rodam em runners de CI; runners gerenciados mais rápidos encurtam longas passagens de verificação de tipos em bases de código grandes.
O veredito
Querendo uma ferramenta que checa e emite: tsc. Querendo transpilação rápida e transformações ricas: Babel - mas adicione uma etapa de verificação de tipos com tsc --noEmit. A maioria dos pipelines combina um transpiler rápido com o tsc para checagem.