Hola a todos, hoy me gustaría hablarles sobre un tema muy interesante relacionado con TypeScript, es decir, la seguridad de tipos en tiempo de ejecución. TypeScript no es perfecto y nunca cumplirá todas las expectativas de todos los usuarios. En las etapas iniciales de TypeScript, surgió la pregunta sobre la posibilidad de tener un sistema de tipos en tiempo de ejecución, pero se estableció que la verificación de tipos en tiempo de ejecución queda fuera de los objetivos de diseño. TypeScript se compila a JavaScript, por lo que no hay validación de tipos en tiempo de ejecución. Una solución potencial es utilizar tipos o validadores en tiempo de ejecución, y existen varias bibliotecas disponibles. Puedes elegir una biblioteca en función de criterios como rendimiento y popularidad. Las cinco principales bibliotecas de tipos en tiempo de ejecución según las estrellas de GitHub son Yap, AJV, Zad, IOTS y Runtypes.
Hola a todos, hoy me gustaría hablarles sobre un tema muy interesante relacionado con TypeScript, es decir, la seguridad de tipos en tiempo de ejecución, pero antes de eso, me gustaría presentarme. Soy Kejtan Świątek, soy un desarrollador front-end de Wrocław, y pueden encontrar mi trabajo en Twitter, en kejtansw, o en mi blog kejtan.dev, donde ocasionalmente escribo sobre programación funcional en el front-end y cosas que aprendo en el camino.
Permítanme comenzar esta presentación afirmando que TypeScript no es perfecto, y sé que es una afirmación bastante audaz, considerando que esta es una conferencia de TypeScript, y espero que los organizadores no me prohíban de por vida por ello, pero lo que quiero decir es que TypeScript, al igual que cualquier otra herramienta, nunca cumplirá todas las expectativas de todos sus usuarios. Y en las etapas iniciales de TypeScript, una de las expectativas era tener un sistema de tipos en tiempo de ejecución, y la comunidad preguntó si era una pieza faltante del ecosistema de TypeScript. Esta pregunta fue respondida bastante temprano y en 2014 se estableció que la verificación de tipos en tiempo de ejecución queda fuera de los objetivos de diseño de TypeScript. Y como pueden ver, esto generó sentimientos encontrados en la comunidad. Pero creo que después de ocho años desde esa respuesta, esto se ha asentado en nuestras mentes como desarrolladores de TypeScript. Y nos hemos acostumbrado bastante al hecho de que TypeScript en su núcleo es simplemente JavaScript. Y lo que quiero decir con eso es que después de que terminamos nuestro trabajo con nuestro código, se compila a JavaScript para ser interpretado por diferentes entornos de ejecución como Node.js o nuestros navegadores. Así que nos deshacemos de todas nuestras interfaces y tipos. Por lo tanto, no tenemos validación de tipos en tiempo de ejecución.
Y el ejemplo más simple de eso puede ser obtener algunos datos de APIs externas. Este es un código común en nuestros proyectos de TypeScript. Tenemos una interfaz para nuestros datos en tiempo de ejecución. Obtenemos estos datos de alguna API y analizamos la respuesta a un objeto JSON. Pero pueden ver en la línea 7 que declaramos que nuestro valor en tiempo de ejecución es de tipo Hero, pero la pregunta aquí es ¿qué tan seguros estamos de que el objeto de retorno aquí es realmente de tipo Hero? Y les puedo asegurar que en este ejemplo, no estamos 100% seguros de eso. Entonces, ¿cuál es la solución potencial a este problema? Podrían ser los tipos en tiempo de ejecución, también conocidos como validadores en tiempo de ejecución o validadores de esquemas o decodificadores JSON. Y ¿qué hay del ecosistema de TypeScript? Como con casi todos los problemas, podemos implementarlo nosotros mismos o usar una biblioteca para ello. Afortunadamente, para los tipos en tiempo de ejecución o los validadores en tiempo de ejecución, existen varias bibliotecas que hacen precisamente eso. Y puedes elegir una biblioteca que se adapte a tus necesidades. Hay diferentes criterios que puedes utilizar. Por ejemplo, el rendimiento de dicho análisis. Y la mejor fuente de información al respecto se llama TypeScript runtime type benchmarks. Es un repositorio de GitHub y puedes encontrarlo bajo el código QR aquí en la esquina. Básicamente, te brinda diferentes estadísticas sobre diferentes tipos de análisis y afirmación de tipos, y te proporciona benchmarks de rendimiento de esos para diferentes bibliotecas. Y al igual que con cualquier otra biblioteca, otro criterio que puedes utilizar para encontrar la que se adapte a tus necesidades es la popularidad. Y a todos nos gusta medir la popularidad por las estrellas de GitHub. Así que aquí lo tienes, las cinco principales bibliotecas de tipos en tiempo de ejecución según el número de estrellas de GitHub. Y esas son Yap, AJV, Zad, IOTS y Runtypes. Aquí me gustaría darles un pequeño adelanto de una de esas bibliotecas.
Comments