TypeScript 7.0 e o Compilador em Go: O Que Muda de Verdade no Seu Workflow
TypeScript 7.0 compila 10x mais rápido com compilador nativo em Go. Veja as breaking changes no tsconfig, a armadilha dos plugins e a ordem correta de migração.
TypeScript 7.0 e o Compilador em Go: O Que Muda de Verdade no Seu Workflow
O build do VS Code — 1,5 milhão de linhas de TypeScript — levava 77,8 segundos para compilar. Com o TypeScript 7.0 beta, caiu para 7,5 segundos. O TypeORM foi de 17,5 para 1,3 segundos. Não é mágica de benchmark sintético: é o compilador sendo portado para Go.
O TypeScript 7.0 beta saiu em abril de 2026. A versão estável está prevista para junho ou julho. Este artigo é sobre o que realmente muda no seu workflow — não só os números de performance, mas as breaking changes no tsconfig.json, a armadilha dos plugins, e a ordem correta de migração para quem está no TS 5.x hoje.
Por que Go? (E por que não Rust)
A pergunta aparece em todo thread sobre o assunto. Go foi escolhido por razões práticas, não ideológicas.
O compilador do TypeScript depende fortemente de garbage collector — o modelo de memória da linguagem não foi projetado para gerenciamento manual. Go tem GC maduro e produz binários nativos. Rust teria exigido uma reescrita de modelo de memória além da reescrita de lógica.
O segundo fator é concorrência. O type-checker do TS 7.0 roda em pools de workers paralelos (configuráveis via flag --checkers, default 4). Goroutines tornaram isso implementável de forma direta; o equivalente em Rust teria envolvido escolhas arquiteturais significativamente mais complexas.
O terceiro fator é o mais honesto: familiaridade da equipe. A Microsoft já usava Go internamente em escala. Não foi uma decisão heroica — foi a decisão pragmática.
Importante: o compilador em Go não é uma reescrita do zero. É um port estrutural do TypeScript 6.0. A lógica de type-checking é idêntica; o comportamento de tipos não mudou. O que mudou é a velocidade de execução e a arquitetura de concorrência.
Os números reais
Os benchmarks que a Microsoft divulgou são de projetos reais:
| Projeto | TypeScript 6 | TypeScript 7 | Speedup |
|---|---|---|---|
| VS Code (1,5M LoC) | 77,8s | 7,5s | 10,4x |
| TypeORM | 17,5s | 1,3s | 13,5x |
| Monorepo genérico (45s load) | ~45s | <6s | ~8x |
Uso de memória caiu 57% na mesma carga.
A variação entre projetos existe porque o ganho de paralelismo depende da estrutura do grafo de dependências. Projetos com muitos arquivos independentes — e que usam isolatedDeclarations — ganham mais. Monorepos com muitos import em cascata ainda ganham, mas o speedup é menor porque o paralelismo é limitado pela topologia do grafo.
Para projetos pequenos (< 10k LoC), a diferença absoluta é menos dramática — mas o language server (LSP) fica visivelmente mais responsivo independente do tamanho.
As breaking changes no tsconfig.json
Esse é o ponto que vai pegar a maioria dos times de surpresa. A Microsoft foi clara: TypeScript 6.0 foi o trampolim — todas as depreciações de TS 6 viram hard errors em TS 7.
strict: true agora é o default.
Se seu tsconfig.json não tem "strict": true explícito, o TS 7 habilita automaticamente: noImplicitAny, strictFunctionTypes, strictNullChecks, etc. Codebases que viviam com strict desabilitado vão receber um volume considerável de erros na primeira compilação.
// antes (TS 6) — funciona silenciosamente
{
"compilerOptions": {
"target": "es2020"
}
}
// depois (TS 7) — equivalente ao que o compilador faz por você
{
"compilerOptions": {
"target": "es2020",
"strict": true
}
}
target: "es5" foi removido.
O target mínimo agora é ES2015. Se você transpila para ES5 por questão de suporte a browsers legados, vai precisar do Babel ou de uma pipeline de transpilação separada — o TypeScript não é mais o responsável por essa etapa.
Módulos AMD, UMD, SystemJS e "none" foram removidos.
// ❌ não funciona mais em TS 7
"module": "amd"
"module": "umd"
"module": "systemjs"
"module": "none"
// ✅ formatos suportados
"module": "esnext"
"module": "es2022"
"module": "nodenext"
"module": "commonjs"
moduleResolution: "node10" foi removido.
Se você usa "moduleResolution": "node" (o valor antigo que mapeia para node10), substitua por "bundler" se você usa Vite/webpack/esbuild, ou "nodenext" se está em Node.js puro.
types agora começa como array vazio.
Antes, omitir types em tsconfig.json auto-incluía todos os @types/* presentes no node_modules. Em TS 7, o default é []. Se você depende de tipos ambiente de pacotes que não declarou explicitamente (tipo @types/node sendo incluído magicamente), vai precisar listá-los:
{
"compilerOptions": {
"types": ["node", "jest"]
}
}
A armadilha que ninguém menciona: o Compiler API
Se você mantém um plugin de TypeScript, um transformer customizado, ou qualquer ferramenta que faz import * as ts from 'typescript' — não migre para tsgo como compilador principal agora.
A Compiler API (chamada internamente de "Strada API") não existe no tsgo. O pacote @typescript/native-preview exporta apenas o binário de build. A API programática está sendo construída para TypeScript 7.1, não 7.0.
Isso afeta:
- Plugins de
ts-jest - Transformers do
ttypescript/ts-patch - Ferramentas como
ts-morph - Qualquer coisa que use o compilador via programmatic API
A estratégia recomendada até TS 7.1: manter typescript pinado na versão 6 para type-checking e tooling, e instalar @typescript/native-preview como binário separado apenas para build speed:
npm install --save-dev typescript@6 @typescript/native-preview
Você usa tsc (TS 6) para type-check no CI e no editor, e tsgo para builds de produção onde só precisa do output compilado.
Como testar agora
O beta está disponível desde abril de 2026:
# instalar o preview
npm install --save-dev @typescript/native-preview
# rodar
npx tsgo --version
npx tsgo --build
# ou direto no package.json
"scripts": {
"build:fast": "tsgo --build"
}
A extensão TypeScript Native Preview para VS Code já está estável o suficiente para uso diário em projetos sem plugins customizados.
A ordem correta de migração
Se você está no TypeScript 5.x, a migração direta para TS 7 é um erro. A Microsoft desenhou a transição em dois passos:
Passo 1: TypeScript 6.0 primeiro
O TS 6.0 foi lançado especificamente como versão de transição. Ele marca como deprecated todas as opções que serão removidas no TS 7 — sem remover, sem quebrar. Funciona como linter de migração.
npm install typescript@6
npx tsc --build
# leia todos os warnings de depreciação — são os erros que vão aparecer no TS 7
Passo 2: Corrigir os warnings, depois TS 7
Cada DeprecatedOption que aparecer no TS 6 é uma breaking change garantida no TS 7. Corrija na sequência:
- Atualize
target,module,moduleResolutionpara os valores suportados - Adicione
strict: trueexplícito (ou corrija os erros que ele vai revelar) - Liste
typesexplicitamente se depende de tipos globais - Avalie se tem plugins ou transformers que dependem da Compiler API — se sim, aguarde TS 7.1
Quando migrar de verdade
Para projetos sem plugins customizados e sem uso da Compiler API: você pode migrar hoje. O beta está estável o suficiente, e o ganho de performance é imediato e mensurável.
Para projetos com transformers, plugins de TS ou ferramentas que importam do pacote typescript: aguarde o TypeScript 7.1, quando a Compiler API será reconstruída. Migrar agora vai quebrar seu toolchain.
O TS 7.0 estável está previsto para junho ou julho de 2026. Se o seu ciclo de release permite, vale esperar algumas semanas pela versão estável antes de ir pra produção.
O que não vale é ignorar a mudança. TypeScript 6.0 já não aceita as opções que vão quebrar no 7 sem ao menos avisar. Se você não subiu para o 6 ainda, esse é o momento.
Nota: o conteúdo editorial acabou aqui. O que vem abaixo é uma indicação de ferramenta relacionada ao tema do post.
Ferramenta relacionada
Durante a migração de tsconfig.json entre versões do TypeScript, comparar o arquivo antes e depois ajuda a revisar o que mudou com clareza. O Comparador de Texto do Quick Tools mostra adições e remoções linha a linha no browser, sem precisar instalar nada — útil especialmente quando você está comparando configs de projetos diferentes no mesmo time.