Se publica la vista previa de TypeScript Native
(devblogs.microsoft.com)- 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
tsgoreemplazará atsc, pero por ahora se distribuye como un paquete separado en npmnpm 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.tspueden 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,
tsctarda 72 segundos ytsgo6.7 segundos, con una mejora de velocidad de más de 10 vecestsgo -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: nodeporbundleronodenext{ "compilerOptions": { "module": "preserve", "moduleResolution": "bundler" } }
- Ejemplo: se recomienda cambiar
-
Otras diferencias:
- El emit de JSX solo puede conservarse
declaration emitno es compatible--buildno es compatible- El servicio de lenguaje relacionado con referencias de proyecto aún no está completo
Próximos planes
- El objetivo es implementar
--buildy 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
Lo estoy usando compilando directamente el lsp. Al cambiarlo a Go, se siente clarísimo que bajó el uso de recursos.
Últimamente está de moda mejorar el rendimiento solo con pasar js a rust / go
Mientras refactorizaba, bastantes veces el análisis de código del lado de
tsserverse ponía lento y el editor se congelaba por completo; ojalá salga pronto y podamos liberarnos de este sufrimiento.