10 puntos por GN⁺ 2025-05-25 | 3 comentarios | Compartir por WhatsApp
  • Se publicó en npm la vista previa de tsgo, del proyecto Corsa que está porteando el compilador de TypeScript a una implementación nativa basada en Go
  • Es el anuncio de seguimiento relacionado con TypeScript 10 veces más rápido, que fue tema en marzo
  • Logró una mejora de velocidad de más de 10 veces frente a tsc, y también soporta JSX y archivos JavaScript basados en JSDoc
  • También se lanzó una extensión Native Preview para VS Code, pero funciones como autocompletado y búsqueda de referencias siguen en desarrollo
  • También están preparando una nueva API nativa y un servidor de lenguaje basado en LSP, además de incorporar el módulo de Node basado en Rust libsyncrpc
  • Algunas funciones todavía no están implementadas, y existen diferencias claras entre TypeScript 7 (Corsa) y la versión 5.8 actual (Strada)

Resumen de TypeScript Native Preview

  • Se publicó la vista previa del proyecto de port nativo de TypeScript (Corsa) anunciado en marzo de 2025
  • En comparación con la base de código existente en JavaScript (Strada), tsgo, escrito en Go, muestra mejoras de rendimiento de más de 10 veces en proyectos grandes gracias al paralelismo y al uso de memoria compartida
  • En el futuro tsgo reemplazará a tsc, pero por ahora se distribuye como un paquete separado en npm
    npm install -D @typescript/native-preview  
    npx tsgo --project ./src/tsconfig.json  
    

Extensión para VS Code

  • Se lanzó la extensión “TypeScript (Native Preview)” para VS Code

  • Después de instalarla, es necesario activarla desde la paleta de comandos o la configuración

    "typescript.experimental.useTsgo": true  
    
  • Por ahora depende de la extensión existente y sus funciones son limitadas, pero se seguirá mejorando de forma continua

Ciclo de lanzamiento y hoja de ruta de desarrollo

  • Esta vista previa evolucionará en el futuro hacia la versión estable de TypeScript 7
  • Se distribuye como compilación nocturna (Nightly) y se actualiza automáticamente
  • Algunas funciones todavía no son compatibles:
    • --build, --declaration, emit para targets inferiores
    • Funciones del editor: autocompletado, búsqueda de referencias, renombrado, etc.

Actualizaciones principales

Mayor completitud en la verificación de tipos

  • Ya se completó el port de la mayoría de las funciones de verificación de tipos
  • También comenzó el soporte para la verificación de tipos de JSX y JavaScript + JSDoc
  • Algunos cambios intencionales y diferencias en lib.d.ts pueden hacer que los errores varíen

Soporte para verificación de tipos en JSX

  • Al principio JSX solo podía parsearse, pero ahora ya cuenta con soporte completo de verificación de tipos
  • Ejemplo: en el proyecto Sentry, tsc tarda 72 segundos y tsgo 6.7 segundos, con una mejora de velocidad de más de 10 veces
    tsgo -p . --noEmit --extendedDiagnostics  
    

Verificación de tipos en archivos JavaScript

  • La función que analiza archivos JS con base en JSDoc también fue reimplementada en código nativo
  • Fue refactorizada de una forma más moderna y consistente que el método anterior
  • Algunos patrones antiguos podrían dejar de reconocerse

Funciones del editor (basadas en LSP)

  • Se está reescribiendo como un servidor de lenguaje basado en LSP en lugar del TSServer existente
  • En la versión inicial ofrece marcado de errores, ir a definición y hover
  • Recientemente también se añadió la función de autocompletado (completion)

Estado del desarrollo de la API

  • Se está implementando una capa de API basada en IPC
  • Permitirá que distintos lenguajes se comuniquen con el proceso de TypeScript
  • Para la comunicación síncrona en Node.js se incorporó el módulo basado en Rust libsyncrpc
  • El diseño de la API aún está en una etapa inicial y se sigue recibiendo retroalimentación

Diferencias frente a TypeScript actual

  • Algunas diferencias de configuración pueden provocar errores en proyectos existentes:

    • Ejemplo: se recomienda cambiar --moduleResolution: node por bundler o nodenext
      {  
        "compilerOptions": {  
          "module": "preserve",  
          "moduleResolution": "bundler"  
        }  
      }  
      
  • Otras diferencias:

    • El emit de JSX solo puede conservarse
    • declaration emit no es compatible
    • --build no es compatible
    • El servicio de lenguaje relacionado con referencias de proyecto aún no está completo

Próximos planes

  • El objetivo es implementar --build y la mayoría de las funciones clave del editor antes de que termine este año
  • El progreso del desarrollo se seguirá actualizando a través del blog y de los lanzamientos nightly

3 comentarios

 
riki3 2025-05-25

Lo estoy usando compilando directamente el lsp. Al cambiarlo a Go, se siente clarísimo que bajó el uso de recursos.

 
cnaa97 2025-05-25

Últimamente está de moda mejorar el rendimiento solo con pasar js a rust / go

 
click 2025-05-25

Mientras refactorizaba, bastantes veces el análisis de código del lado de tsserver se ponía lento y el editor se congelaba por completo; ojalá salga pronto y podamos liberarnos de este sufrimiento.