Blog
35 artigos · atualizado semanalmente Veja nossas Ferramentas
Todos os artigos
Novidades

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.

COVER · Novidades

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:

  1. Atualize target, module, moduleResolution para os valores suportados
  2. Adicione strict: true explícito (ou corrija os erros que ele vai revelar)
  3. Liste types explicitamente se depende de tipos globais
  4. 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.

RD
Autor
Rafael Duarte
Desenvolvedor backend com passagem por fintech e SaaS B2B — trabalhou em times que escalaram APIs de zero a milhões de requisições. Carrega cicatrizes de produção suficientes para ter opiniões fortes sobre ferramentas, padrões e decisões de arquitetura. Não é acadêmico: leu a RFC do UUID quando precisou escolher entre v4 e v7 para uma tabela de alta escrita.
Ver perfil