10 pontos por GN⁺ 2025-05-25 | 3 comentários | Compartilhar no WhatsApp
  • 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 tsc atual, 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 tsgo deve substituir o tsc, mas por enquanto é distribuído como um pacote npm separado
    npm 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 tsc levou 72 segundos e o tsgo, 6,7 segundos, para um ganho de mais de 10x
    tsgo -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-se bundler ou nodenext
      {  
        "compilerOptions": {  
          "module": "preserve",  
          "moduleResolution": "bundler"  
        }  
      }  
      
  • Outras diferenças:

    • O emit de JSX só pode ser preservado
    • emit de declaration não é suportado
    • --build não é suportado
    • O serviço de linguagem relacionado a referências de projeto ainda está incompleto

Próximos passos

  • A meta é implementar --build e 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

 
riki3 2025-05-25

Estou compilando e usando o lsp diretamente. Ao mudar para Go, dá para perceber claramente a redução no consumo de recursos.

 
cnaa97 2025-05-25

Hoje em dia, virou moda simplesmente migrar JS para Rust/Go para melhorar o desempenho

 
click 2025-05-25

Quando eu estava refatorando, acontecia bastante de a análise de código do lado do tsserver ficar lenta e o editor travar por completo; tomara que isso saia logo para nos libertar desse sofrimento.