Prévia do TypeScript Native é lançada
(devblogs.microsoft.com)- A prévia do
tsgo, do projeto Corsa que porta o compilador TypeScript para uma implementação nativa baseada em Go, foi lançada no npm - É o anúncio de continuação relacionado ao tema TypeScript 10 vezes mais rápido, que chamou atenção em março
- Em comparação com o
tscatual, ele alcança mais de 10x de ganho de velocidade e também oferece suporte a arquivos JS com JSX e JSDoc - A extensão Native Preview para VS Code também foi lançada, mas recursos como autocomplete e localizar referências ainda estão em desenvolvimento
- Uma nova API nativa e um servidor de linguagem baseado em LSP também estão em preparação, com a adoção do módulo Node em Rust libsyncrpc
- Alguns recursos ainda não foram implementados, e há diferenças claras entre o TypeScript 7 (Corsa) e o 5.8 atual (Strada)
Visão geral da TypeScript Native Preview
- Foi lançada a prévia do projeto de port nativo do TypeScript (Corsa), anunciado em março de 2025
- Em comparação com a base de código existente em JS (Strada), o
tsgo, escrito em Go, mostra ganhos de desempenho superiores a 10x em projetos grandes graças ao uso de paralelismo e memória compartilhada - No futuro, o
tsgodeve substituir otsc, mas por enquanto é distribuído como um pacote npm separadonpm install -D @typescript/native-preview npx tsgo --project ./src/tsconfig.json
Extensão para VS Code
-
Lançamento da extensão “TypeScript (Native Preview)” para VS Code
-
Após a instalação, é necessário ativá-la pela paleta de comandos ou pelas configurações
"typescript.experimental.useTsgo": true -
No momento, ela ainda depende da extensão existente e tem funcionalidades limitadas, mas deve continuar evoluindo
Ciclo de lançamento e roadmap de desenvolvimento
- Esta prévia deve evoluir futuramente para a versão oficial do TypeScript 7
- É distribuída como build noturna (Nightly) e atualizada automaticamente
- Alguns recursos ainda não são suportados:
--build,--declaration, emit para targets inferiores- Recursos de editor: autocomplete, localizar referências, renomear etc.
Principais atualizações
Maior completude na checagem de tipos
- A maior parte dos recursos de checagem de tipos já foi portada
- Também começou o suporte à checagem de tipos de JSX e de JavaScript + JSDoc
- Alguns erros podem diferir devido a mudanças intencionais e diferenças em
lib.d.ts
Suporte à checagem de tipos de JSX
- No início, JSX só podia ser analisado sintaticamente, mas agora há suporte completo à checagem de tipos
- Exemplo: no projeto Sentry, o
tsclevou 72 segundos e otsgo, 6,7 segundos, para um ganho de mais de 10xtsgo -p . --noEmit --extendedDiagnostics
Checagem de tipos em arquivos JavaScript
- O recurso que analisa arquivos JS com base em JSDoc também foi reimplementado em código nativo
- Foi refatorado para um modelo mais moderno e consistente do que o anterior
- Alguns padrões antigos podem não ser mais reconhecidos
Recursos de editor (baseados em LSP)
- Está em andamento a reescrita para um servidor de linguagem baseado em LSP no lugar do TSServer atual
- Na versão inicial, ele oferece exibição de erros, ir para definição e hover
- Recentemente, o recurso de autocomplete (completion) também foi adicionado
Estado do desenvolvimento da API
- Está sendo implementada uma camada de API baseada em IPC
- Ela permitirá a comunicação com o processo do TypeScript a partir de várias linguagens
- Para comunicação síncrona no Node.js, foi adotado o módulo em Rust libsyncrpc
- O design da API ainda está em estágio inicial, e feedbacks estão sendo recebidos
Diferenças em relação ao TypeScript atual
-
Algumas diferenças de configuração podem causar erros em projetos existentes:
- Exemplo:
--moduleResolution: node→ recomendam-sebundlerounodenext{ "compilerOptions": { "module": "preserve", "moduleResolution": "bundler" } }
- Exemplo:
-
Outras diferenças:
- O emit de JSX só pode ser preservado
- emit de declaration não é suportado
--buildnão é suportado- O serviço de linguagem relacionado a referências de projeto ainda está incompleto
Próximos passos
- A meta é implementar
--builde a maior parte dos recursos centrais de editor até o fim deste ano - O andamento do desenvolvimento continuará sendo atualizado por meio do blog e das releases nightly
3 comentários
Estou compilando e usando o
lspdiretamente. Ao mudar para Go, dá para perceber claramente a redução no consumo de recursos.Hoje em dia, virou moda simplesmente migrar JS para Rust/Go para melhorar o desempenho
Quando eu estava refatorando, acontecia bastante de a análise de código do lado do
tsserverficar lenta e o editor travar por completo; tomara que isso saia logo para nos libertar desse sofrimento.