TypeScript 6.0 beta: novos padrões, muitas depreciações e a ponte para o TypeScript 7
A Microsoft publicou em 11 de fevereiro o beta do TypeScript 6.0. É importante deixar claro que é um beta, não a versão final, mas ele já mostra o que vem por aí. E o que vem é uma versão de transição: segundo o anúncio, o 6.0 deve ser a última versão baseada no código atual em JavaScript. O TypeScript 7.0 será construído sobre um compilador nativo escrito em Go. O 6.0 existe, em boa parte, para preparar os projetos para esse salto.
Para testar:
npm install -D typescript@beta
Os novos padrões
A mudança que mais vai aparecer em projetos reais é a troca de valores padrão do compilador:
strictpassa a sertrue;modulepassa a seresnext;targetpassa a ser a versão mais recente do ECMAScript, hojees2025;noUncheckedSideEffectImportspassa a sertrue;libReplacementpassa a serfalse;typespassa a ser[];rootDirpassa a ser o diretório que contém otsconfig.json.
O padrão de types é o que mais deve quebrar builds. Antes, o TypeScript incluía automaticamente os pacotes @types instalados; agora, muitos projetos vão precisar declarar explicitamente algo como "types": ["node"]. Se seu projeto de repente não encontra process ou Buffer, é isso.
O strict como padrão é, na minha opinião, a mudança certa e atrasada. Quase todo projeto novo já liga strict; agora o comportamento sem configuração reflete como o TypeScript é usado de verdade.
Recursos novos
Algumas adições práticas:
- Subpath imports com
#/funcionam commoduleResolutionnode20,nodenextebundler. --moduleResolution bundlerpode ser combinado com--module commonjs, o que ajuda projetos que ainda emitem CommonJS mas usam um bundler.--stableTypeOrderingfaz a ordem dos tipos bater com a do TypeScript 7.0, para facilitar a comparação durante a migração. O anúncio avisa que a flag pode deixar a checagem até 25% mais lenta e não deve ser usada como configuração permanente.es2025comotargetelib, com tipos comoRegExp.escape.- Tipos do Temporal via
esnextoutemporal.esnext(a proposta está no estágio 3). getOrInsertegetOrInsertComputedemMapeWeakMap, na libesnext.- O conteúdo de
dom.iterableedom.asynciterablepassa a fazer parte dedom; esses dois arquivos de lib agora estão vazios.
A lista de depreciações
Aqui está o coração do 6.0. Ficam depreciados ou removidos:
target: es5e--downlevelIteration;--moduleResolution node(node10) eclassic(removido);--moduleamd,umdesystemjs;baseUrleoutFile(este removido);- definir
esModuleInteropouallowSyntheticDefaultImportscomofalse, ealwaysStrict: false; - a palavra-chave
modulepara namespaces,assertsem imports (substituído porwith) e a diretivano-default-lib.
Também muda o comportamento da CLI: passar arquivos na linha de comando quando existe um tsconfig.json agora gera o erro TS5112. Para ignorar a configuração, use --ignoreConfig.
Dá para silenciar as depreciações no 6.0 com "ignoreDeprecations": "6.0". Mas isso é só um adiamento: o TypeScript 7.0 remove essas opções de vez.
Como eu me prepararia
Na prática, o 6.0 é um ensaio geral para o 7.0. Minha sugestão:
- Instale o beta em um branch e rode a checagem de tipos sem
ignoreDeprecations, para ver a lista real de problemas. - Declare
typesexplicitamente notsconfig.json. - Troque
baseUrlpor subpath imports oupathsrelativos, e saia demoduleResolution node. - Se ainda depende de
es5ououtFile, comece a planejar a saída agora, porque não haverá versão 7 com isso.
Minha leitura
O TypeScript 6.0 é uma versão que pouca gente vai achar empolgante, e tudo bem. O valor dele está em fazer o trabalho chato antes do compilador nativo chegar: limpar opções legadas, alinhar padrões com o uso real e oferecer ferramentas como --stableTypeOrdering para comparar resultados. Quem tratar o 6.0 como a hora de arrumar o tsconfig vai ter uma migração tranquila para o 7.0. Quem só ligar ignoreDeprecations e seguir em frente vai pagar a conta depois, e com juros.