TypeScript 7 RC: el compilador reescrito en Go, hasta 10 veces más rápido

Fuentes: TypeScript 7 RC: the compiler rewritten in Go, around 10x faster, devblogs.microsoft.com

Microsoft anunció esta semana la Release Candidate (RC) de TypeScript 7, una versión que marca un antes y un después para este superset de JavaScript: por primera vez, el compilador completo ha sido reescrito en Go, abandonando la implementación original en TypeScript que compilaba a JavaScript. El resultado, según los datos de la propia compañía y de empresas que llevan más de un año probando las versiones previas, son compilaciones entre 8 y 10 veces más rápidas, con picos que pueden alcanzar las 12 veces en proyectos grandes.

El cambio no responde a un capricho de rendimiento, sino a una decisión arquitectónica deliberada. Go, al compilar a código nativo y aprovechar el paralelismo mediante memoria compartida, permite que el compilador saque partido a los procesadores multinúcleo modernos de una forma que el motor escrito en TypeScript jamás podía ofrecer. El equipo de Microsoft, según explicó en su blog oficial, realizó un port "lo más fiel posible" del código original: la lógica de chequeo de tipos se mantiene estructuralmente idéntica a la de TypeScript 6, por lo que los desarrolladores no tendrán que cambiar la forma en que escriben su código. Solo obtendrán más velocidad.

Las mejoras no se limitan al comando tsc en la terminal. El Language Server Protocol (LSP), que impulsa el autocompletado, los hovers de tipo y los errores en tiempo real dentro del editor, corre sobre la misma base. En la práctica, esto significa que en proyectos grandes el editor responderá de manera mucho más ágil, una ganancia que los desarrolladores percibirán a diario, incluso más que la reducción en los tiempos de compilación. La fuente del anuncio oficial destaca que editores como VS Code, Visual Studio y WebStorm ya son compatibles, con extensiones dedicadas o soporte automático según el espacio de trabajo.

Las cifras de rendimiento no son solo teoría. Empresas como Figma, Bloomberg, Vercel, Notion y Slack han probado las builds previas durante más de un año y reportan ganancias similares, lo que otorga solidez a las mediciones de Microsoft. El repositorio, publicado bajo licencia Apache 2.0, ya acumula más de 25.000 estrellas en GitHub y está compuesto en aproximadamente un 85% por código Go.

Antes de dar el salto a TypeScript 7, Microsoft recomienda pasar por TypeScript 6, una versión que no introduce grandes funcionalidades nuevas pero que prepara el terreno: todo lo que estaba deprecado en 6 se convierte en error en 7. Entre los cambios que pueden sorprender a los desarrolladores se encuentran defaults endurecidos como strict en true, module en esnext, rootDir apuntando a ./ en lugar de ./src, y types como lista vacía que obliga a declarar manualmente los paquetes @types. Configuraciones históricas como target: es5, moduleResolution: node, baseUrl o module: amd/umd/systemjs dejarán de funcionar.

La transición plantea un desafío de compatibilidad de herramientas. Paquetes como typescript-eslint importan la API de TypeScript directamente, y la API programática estable no llegará hasta TypeScript 7.1, prevista para dentro de unos meses. Para sortear este obstáculo, Microsoft ofrece un paquete de compatibilidad, @typescript/typescript6, que puede coexistir con TypeScript 7 mediante alias en el package.json: el linter apunta a la versión 6, mientras que tsc corre la 7. Esta estrategia de cambio paralelo permite migrar sin romper el ecosistema de herramientas.

TypeScript 7 introduce además nuevas opciones de paralelización. Por defecto, el compilador utiliza 4 workers, ajustables con el flag --checkers, lo que permite escalar el uso de núcleos a costa de mayor consumo de memoria. En entornos de CI con recursos limitados, la recomendación es reducir este número. Para monorepos, la opción --builders permite compilar varios proyectos simultáneamente, aunque su efecto se multiplica al combinarse con --checkers: con ambos a 4, es posible llegar a 16 comprobadores de tipo en paralelo. Para depuración o comparativas con la versión 6, --singleThreaded fuerza un único hilo.

El modo watch también se reconstruyó desde cero, ahora sobre el file watcher de Parcel, también portado a Go, lo que elimina el costoso polling sobre grandes carpetas node_modules y reduce drásticamente el consumo asociado a la vigilancia de archivos.

La instalación es inmediata: npm install -D typescript@rc permite probar la versión candidata, y la versión estable está prevista para el próximo mes, según confirmó el equipo de Microsoft. Quienes prefieran vivir en la frontera pueden instalar los nightly builds con @typescript/native-preview, cuyo binario conserva el nombre tsgo.

En definitiva, TypeScript 7 no cambia ni la sintaxis ni las reglas de tipado: su apuesta entera es por la velocidad, tanto en la compilación como en la experiencia dentro del editor. La hoja de ruta razonable es clara: migrar primero a TypeScript 6 para limpiar las advertencias, probar la RC en paralelo sobre un proyecto real, reportar los bugs en el repositorio microsoft/typescript-go y esperar la versión estable que llegará en las próximas semanas. Cuando eso ocurra, todo el ecosistema podrá beneficiarse de un salto de rendimiento que, según todos los indicadores disponibles, será el más significativo en la historia del lenguaje.