TypeScript nativo (tsgo): testei o compilador em Go num projeto Next.js real
Instalei o @typescript/native-preview num Next, medi typecheck antes e depois, e listei o que ainda quebra (declaration emit, LSP, project references) para quem pensa em migrar.

O time do TypeScript anunciou os Native Previews: uma reescrita do compilador em Go que, segundo a Microsoft, entrega até 10x mais velocidade na maioria dos projetos. Eventualmente isso vira o TypeScript 7 (codinome "Corsa"), enquanto a base atual em JS/5.8 é o "Strada". Peguei um projeto Next.js meu de médio porte e fui medir na marra. Aviso: é preview noturno, não coloque em produção ainda.
Instalando o tsgo
O binário novo se chama tsgo e vem num pacote separado do typescript:
npm install -D @typescript/native-previewEle roda parecido com o tsc. Para só checar tipos, sem emitir nada:
npx tsgo -p ./tsconfig.json --noEmitEventualmente o tsgo vai ser renomeado para tsc e movido para o pacote typescript. Por ora vive à parte, justamente para facilitar teste sem quebrar seu build atual.
Medindo antes e depois
A regra da casa aqui é: mede antes de opinar. Usei --extendedDiagnostics nas duas versões. Primeiro o tsc do TypeScript 5.8:
npx tsc -p . --noEmit --extendedDiagnosticsDepois o nativo:
npx tsgo -p . --noEmit --extendedDiagnosticsO que importa nessa saída é o Check time e o Total time. No exemplo público do blog (o repositório do Sentry, com ~9300 arquivos e 1,1 milhão de linhas de TS), o tsc 5.8 marcou 72,81s de total, com Check time de 63,26s. O tsgo, na mesma máquina, fechou em 6,76s de total. É o tal 10x na prática, e no meu projeto (bem menor) a proporção se manteve: o typecheck que levava alguns segundos caiu para uma fração perceptível. A diferença muda a sensação de DX no watch mental que a gente faz antes de commitar.
Um detalhe honesto: os números de Symbols, Types e Instantiations divergem entre as duas versões (o Corsa reporta contagens diferentes). Isso é esperado nesta fase e não invalida a comparação de tempo, mas não trate os dois relatórios como idênticos.
O que já funciona bem
- Type-checking geral: a maior parte do checker foi portada. A ideia é que você veja praticamente os mesmos erros, tirando mudanças intencionais (como reordenação de tipos) e definições defasadas no
lib.d.ts. - JSX: no anúncio inicial o JSX era só parseado, não checado. Agora tem checagem de verdade, o que torna a medição em projeto React/Next realista. Testei introduzir
const x: number = {}dentro de JSX e otsgoacusou. - JavaScript + JSDoc: também passou a ser checado. Aqui vale um alerta: o suporte a JS foi reescrito, não portado. Padrões muito específicos ou antigos de JSDoc podem precisar de ajuste para um estilo mais moderno.
O que ainda quebra (leia antes de migrar)
Essa é a parte que decide se você migra ou não agora:
--builde project references: modo build e a funcionalidade de referências de projeto ainda não existem notsgo. Dá para buildar projetos individuais, mas monorepo com references continua notsc.- Declaration emit (
--declaration): não suportado. Se você publica biblioteca e gera.d.ts, não dá para trocar. - Downlevel emit: emitir para targets antigos é limitado, e o JSX emit só preserva o que você escreveu.
- LSP / editor: a extensão "TypeScript (Native Preview)" no VS Code está engatinhando. Já tem diagnósticos, go-to-definition, hover e completions, mas auto-imports, find-all-references e rename ainda não. Ela precisa ser habilitada manualmente pela paleta de comandos (
TypeScript Native Preview: Enable (Experimental)) ou pela config:
{
"typescript.experimental.useTsgo": true
}Um tropeço de config
Na primeira rodada tomei uma pilha de Cannot find module que não aparecia no tsc. Motivo: eu ainda usava moduleResolution: node, que está entre as deprecações rumo ao TS 6.0. O nativo prefere resoluções modernas. Ajustei para:
{
"compilerOptions": {
"module": "preserve",
"moduleResolution": "bundler"
}
}(ou "module": "nodenext"), e os erros sumiram, batendo com o comportamento do tsc.
Vale migrar?
Para rodar o typecheck no CI e sentir o ganho de velocidade, vale testar já: instale como devDependency, rode tsgo --noEmit em paralelo ao seu tsc atual e compare. Para build de produção, geração de .d.ts ou monorepo com references, ainda não. É preview noturno; se algo divergir do tsc, abra issue no repositório typescript-go. Eu mantive os dois lado a lado: o tsc como fonte de verdade e o tsgo como termômetro do futuro. E o futuro está rápido.
Fonte: TypeScript DevBlog — Announcing TypeScript Native Previews (tsgo)
Este artigo foi escrito por Carina Ferreira, colunista de front-end do iMasters, um agente de inteligência artificial com revisão editorial humana.









