Transcript
00:00:00TypeScript acaba de lanzar una versión candidata para la versión 7 y esta será la versión donde
00:00:04TypeScript no es TypeScript. Si has estado desconectado, han estado trabajando en reescribir el
00:00:07compilador de TypeScript, pasando de TypeScript mismo a Go, y al parecer los resultados son 10 veces más rápidos.
00:00:12Esperan lanzar TypeScript 7 el próximo mes, así que vamos a ver qué ha cambiado realmente,
00:00:17qué tan rápido es y si hay algún cambio importante que necesites saber antes de instalarlo.
00:00:26Así que, si te perdiste la noticia sobre la migración a Go, empezaron hace aproximadamente un año
00:00:29y el resumen es que se dieron cuenta de que JavaScript nunca fue diseñado para el trabajo pesado intensivo en CPU
00:00:34que requiere un verificador de tipos, así que comenzaron a reescribirlo en Go con gran éxito inicial. De hecho, empezaron
00:00:39básicamente portando la implementación existente de TypeScript casi línea por línea, por lo que la lógica de
00:00:44verificación de tipos era estructuralmente igual y tenía el mismo comportamiento, e incluso podías ver que algunas
00:00:48de las funciones eran casi idénticas, salvo por el lenguaje. También estoy bastante seguro de que esto fue antes de
00:00:52que pudieras simplemente apuntar a Claude a tu base de código y decir “migra al lenguaje que quieras”.
00:00:56Te estoy mirando, Bun. Los resultados de la migración hablan por sí solos. Aquí tengo
00:01:00el repositorio de Playwright y si hago una comprobación de tipos usando la versión antigua de TypeScript aquí, podemos ver que esto
00:01:04tarda alrededor de seis segundos en completarse y procesó 1400 archivos y medio millón de líneas de
00:01:08código. Si ahora cambio a la versión candidata sin cambiar nada más que este comando,
00:01:12en total tomó 0,87 segundos. Eso es una mejora seria. También encontró exactamente la misma cantidad de
00:01:18errores, los mismos errores; revisó los mismos archivos y todas las líneas de código, así que funciona exactamente
00:01:23igual que TypeScript 6. El código nativo de Go es simplemente fundamentalmente más rápido que JavaScript para una
00:01:27tarea como esta, pero también les permite usar el paralelismo de memoria compartida. Así que, donde el compilador de JavaScript
00:01:32era monohilo, Go puede distribuir esa verificación de tipos en múltiples núcleos a la vez. En TypeScript
00:01:377 puedes incluso forzar que sea monohilo con una bandera, tal vez por si estás haciendo depuración
00:01:41o estás ejecutando en una máquina con recursos limitados. Y si hago esto en la base de código de Playwright
00:01:46aquí con TypeScript 7, podemos ver que al ser monohilo toma alrededor de dos segundos, lo cual es
00:01:50todavía tres veces más rápido que antes. Hablando de ejecutar en paralelo, también están exponiendo
00:01:54una nueva bandera de verificadores (checkers) que en realidad te permite establecer cuántos trabajadores de verificación de tipos pueden ejecutarse en paralelo
00:01:58y esto tiene un valor predeterminado de cuatro. Aumentar esto podría acelerar tus compilaciones en bases de código más grandes si
00:02:03tienes muchos núcleos de CPU, pero vendrá a costa de un mayor uso de memoria. Si configuro los verificadores
00:02:08a 8 en este repositorio de Playwright, que es el doble del valor predeterminado, realmente parece reducir otro
00:02:12tercio del tiempo. También hay una nueva bandera de constructores (builders) para paralelizar las compilaciones de referencia de proyectos, es decir, compilar
00:02:16múltiples proyectos a la vez, y esta bandera te permite controlar el número de constructores paralelos que pueden
00:02:20ejecutarse a la vez. Y vale la pena señalar que si combinas esto con los verificadores que acabamos de ver, digamos
00:02:24que tienes cuatro de cada uno, eso significa que puedes tener hasta 16 verificadores de tipo ejecutándose a la vez. Ahora, además de
00:02:29los cambios en el código nativo y el paralelismo, otra gran reescritura en TypeScript 7 ha sido su modo de vigilancia (watch mode).
00:02:34Cuando pasaron a Go, esto fue en realidad un poco más complicado, ya que la biblioteca estándar no proporciona
00:02:38APIs de vigilancia de archivos integradas, y las bibliotecas de terceros que probaron tenían problemas con cosas como
00:02:43estabilidad, rendimiento y soporte multiplataforma. Así que el equipo miró el vigilante de archivos del
00:02:47empaquetador Parcel, que Microsoft de hecho usa un poco en VS Code, pero como estaba en C++, también
00:02:53tuvieron que portar las partes que necesitaban a Go también. La buena noticia, sin embargo, es que hicieron
00:02:57todo y parece estar funcionando realmente bien y mejor que antes. A continuación, como esto es
00:03:01un cambio de versión mayor, podrías estar esperando muchos cambios importantes, especialmente porque es una gran
00:03:05reescritura, pero en realidad no creo que haya ninguno si estás actualizando de TypeScript 6 a 7. Si
00:03:10quieres pasar de 5 a 7 sí habrá bastantes, así que parece que recomiendan que
00:03:14subas a 6 primero, hagas que todo funcione, y luego el salto de versión a 7 no debería tener problemas. Algunos de
00:03:19los grandes cambios en TypeScript 6 fueron eliminar el objetivo ES5, eliminar baseUrl y depreciar los sistemas de
00:03:24módulos AMD, UMD y SystemJS. También hicieron que strict fuera true por defecto, hicieron que module fuera esnext por defecto
00:03:31y el objetivo (target) por defecto es la versión actual estable de ECMAScript inmediatamente anterior a esnext. Fue
00:03:36básicamente mucho dejar atrás el pasado y modernizar TypeScript, lo cual realmente me gusta ya que
00:03:40a veces intentar soportar proyectos heredados en cada versión que haces puede ralentizar realmente el
00:03:45progreso de una herramienta. Mirando el resto de esta publicación de blog, en realidad parece que la única característica
00:03:49o cambio nuevo que concierne al lenguaje TypeScript en sí es que los tipos de literales de plantilla
00:03:53ahora preservan los puntos de código Unicode. Esencialmente, antes de TypeScript 7, TypeScript en realidad dividía en unidades de código UTF-16,
00:03:59por lo que terminaba dividiendo un emoji por la mitad y terminabas con estos tipos extraños para la cabeza
00:04:04y la cola aquí. Sin embargo, en TypeScript 7, en realidad divide en puntos de código completos, es decir, caracteres completos,
00:04:09así que ahora el emoji se preserva y la división es prácticamente como esperarías que fuera. Estaría
00:04:13honestamente increíblemente impresionado si alguno de ustedes se ha encontrado alguna vez con esto en su tiempo usando TypeScript.
00:04:18Con todo, estos cambios deberían hacer que todo lo que usa TypeScript se sienta mucho más rápido, como TypeScript
00:04:22en tu editor, especialmente para grandes proyectos. Se espera el lanzamiento estable en aproximadamente un mes,
00:04:27pero una API programática estable, es decir, lo que los autores de herramientas usan para construir sobre el compilador,
00:04:32llegará en la versión 7.1. Debido a esto, también hay un paquete de compatibilidad para que puedas ejecutar
00:04:36TypeScript 6 y 7 lado a lado sin entrar en conflictos. Déjame saber qué piensas de todo
00:04:41esto y tengo curiosidad de si alguna vez sentiste que TypeScript se sentía lento. Déjamelo saber en
00:04:44los comentarios. Mientras estás ahí abajo, suscríbete y como siempre, nos vemos en la próxima.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video