Sumérgete en TypeScript Avanzado

This ad is not shown to multipass and full ticket holders
React Summit US
React Summit US 2025
November 18 - 21, 2025
New York, US & Online
The biggest React conference in the US
Learn More
In partnership with Focus Reactive
Upcoming event
React Summit US 2025
React Summit US 2025
November 18 - 21, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

¿TypeScript o no TypeScript? Han pasado más de diez años desde su nacimiento y muchos de nosotros todavía luchamos por entenderlo y amarlo. Es tan simple pero a veces no sabemos realmente cómo funciona.

Bueno, es hora de entender más y dejar de evadirlo con un simple any.

Tipos, funciones, literales, uniones, intersecciones y más: juntos, veremos todas las nociones que te llevarán a empezar a amarlo y usarlo al máximo para asegurar un futuro más seguro desde el punto de vista tipológico y quizás no ser odiado por tu yo futuro.

This talk has been presented at JSNation 2024, check out the latest edition of this JavaScript Conference.

FAQ

Luca De Pupol es un desarrollador de software italiano que trabaja en Niaform, una empresa consultora irlandesa con ubicaciones en Estados Unidos, Europa central, Brasil e India.

Luca De Pupol ama TypeScript y JavaScript.

Un 'type guard' es una función en TypeScript que permite al compilador determinar el tipo de un objeto. Estas funciones generalmente devuelven un booleano que indica si el objeto cumple o no con un tipo específico.

Según Luca, es crucial estudiar JavaScript antes de aprender TypeScript porque TypeScript se basa en JavaScript y es esencial entender la base antes de avanzar a conceptos más complejos en TypeScript.

Luca sugiere tomar pequeños pasos y comenzar con una configuración menos estricta de TypeScript, avanzando gradualmente para adaptar la base de código completamente.

Luca De Pupol disfruta correr, hacer senderismo y le encantan los animales, especialmente los perros.

Los tipos de marca en TypeScript permiten ser más expresivos con los tipos, ayudando a asegurar que las variables cumplen con reglas específicas y describen mejor el dominio empresarial.

Las bibliotecas como Zod permiten crear esquemas que funcionan tanto en tiempo de compilación como en tiempo de ejecución, ofreciendo una doble verificación para asegurar que los tipos y datos sean correctos y estén bien definidos.

Luca Del Puppo
Luca Del Puppo
30 min
13 Jun, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla de hoy discute TypeScript y su relación con JavaScript, enfatizando la importancia de estudiar JavaScript primero. La charla explora los type guards, la comprobación de tipos en tiempo de ejecución y el uso del tipo 'never' para manejar errores y garantizar la seguridad de tipos. También profundiza en soluciones alternativas para el manejo de tipos, tipos marcados y validación basada en esquemas utilizando Zod. La charla concluye con consejos sobre la migración a TypeScript y la necesidad de documentación amigable para principiantes y rigurosidad en el código.
Available in English: Dive Into Advanced TypeScript

1. Introducción a TypeScript

Short description:

Hoy hablaré sobre TypeScript y JavaScript. TypeScript ama a JavaScript, pero lo contrario no es cierto. Debes estudiar JavaScript antes de pasar a TypeScript. El código JavaScript es el único código que se ejecuta en producción. Ahora, adentrémonos en el código y veamos un ejemplo de cómo trabajar con TypeScript.

Entonces, hoy intento hablar de algo extraño en TypeScript. En primer lugar, permítanme presentarme. Soy Luca De Pupol. Soy italiano. Soy un desarrollador de software en Niaform, y, si no nos conocen, somos una empresa consultora irlandesa pero estamos ubicados en Estados Unidos, Europa central, Brasil y también en algunas posiciones en India. También amo TypeScript y JavaScript. Intento administrar mi canal de YouTube, pero últimamente no tengo mucho tiempo para ello, y también intento escribir publicaciones para personas técnicas. Amo correr, hacer senderismo y los animales, especialmente los perros. Por cierto, quiero comenzar con una pregunta, y no sean tímidos. ¿Quién ama TypeScript? Levanten sus manos, pero si no les gusta, pueden dejar sus manos abajo sin ningún problema. ¡No todas las personas! ¿Y quién ama JavaScript? ¡Espero que todos, porque están aquí! ¡Pero no todos! ¿Por qué? ¿Por qué están aquí? ¿Quién ama Java? ¿Por qué? De acuerdo. Quiero comenzar con pequeños tips. TypeScript ama JavaScript. Entonces, si amas JavaScript, también deberías amar TypeScript. Pero JavaScript no ama TypeScript. Si tienes un código JavaScript, también puede ser un código TypeScript, pero si tienes un código TypeScript, no es un código JavaScript. Por favor, recuerda, antes debes estudiar JavaScript y luego puedes pasar a TypeScript. Siempre. De lo contrario, TypeScript solo será magia para ti, y en tiempo de ejecución, será un desastre. Y recuerda, el código JavaScript es el único código que se ejecuta en producción. Entonces, si no lo conoces, ¡tu cliente llamará a tu jefe, probablemente! De acuerdo, eso es todo por mis tips, y pasemos al code. Creo que esta charla es como una especie de ejemplo y cosas que podemos hacer con TypeScript. Así que intentaré escribir el código con este escritorio, de lo contrario, mostraré el problema y mostraré la solución directamente desde la carpeta de soluciones. Supongo que si estás trabajando con TypeScript, comienzas a crear los tipos para tu objeto. Por ejemplo, puedes tener, en este caso, el objeto persona, el objeto compañía y en alguna parte, tienes una especie de tipo de unión, por ejemplo, el tipo usuario. Que es una unión entre la persona y la compañía. Comienzas a crear tu objeto, la persona y la compañía, puedes crear una nueva persona a partir de la persona actual, pero en alguna parte de tu code, quieres imprimir el usuario. ¿De acuerdo? Pero el usuario puede ser una persona o una compañía. Pero quieres ser estricto y tal vez quieras crear una función para la persona y crear un mensaje específico para la persona, y luego crear un mensaje específico para la compañía. Y esta función acepta una persona o una compañía.

2. Type Guards in TypeScript

Short description:

Para detectar si el usuario es una persona o una compañía y llamar a la función correcta, TypeScript tiene una característica llamada type guard. Las funciones type guard son funciones simples que devuelven un booleano que indica si se cumple una condición o no. Al utilizar type guards, puedes definir explícitamente el tipo del objeto usuario. Sin embargo, el texto contiene algunas partes confusas.

Lo que sucedió aquí es que quieres detectar si el usuario es una persona o una compañía y llamar a la función correcta. Y también obtener el beneficio de TypeScript, por ejemplo, como puedes notar aquí, si verifico si la persona es una persona en esta línea, básicamente, TypeScript no sabe que este usuario es una persona. Pero quiero ser explícito con mi código. ¿Cómo puedo hacer esto? TypeScript tiene una característica genial llamada type guard. ¿Qué es un type guard? Es una forma de crear una función que permite a TypeScript detectar lo que quieres hacer. Por ejemplo, en este caso, quiero decir, okay, quiero crear una función que acepte al usuario y devuelva algo que diga, okay, el usuario es una persona o no. Las funciones type guard son básicamente funciones simples como esta que deben devolver un booleano. Si es verdadero, se cumple la condición, de lo contrario no. ¿Cómo funciona este type guard? Básicamente, puedes hacer esto, usar persona. Usuario es una persona. Le estás diciendo a TypeScript de esta manera, okay, si el resultado de esta función es verdadero, el usuario es una persona. De lo contrario, es otro tipo de usuario. Y también tenemos que implementarlo. ¿Cómo? Básicamente, es una función simple que acepta al usuario, y puedes hacer, por ejemplo, esto para la solución. El código fiscal es parte del usuario. Ahora hay otro... ¿Cuál es el problema? Lo siento. Persona. Usuario. Código fiscal en usuario. ¿Por qué? Maldición, ¡Dios! Lo siento. Puedo pasar a la solución. Es más fácil. También porque aquí está un poco desordenado. Lo siento. De acuerdo. Básicamente, no sé qué es esto. Esto es otro... Permíteme volver atrás. Lo siento.

3. Checking User Types at Runtime

Short description:

Para verificar si una persona es una persona y una compañía es una compañía en tiempo de ejecución, agrega un tipo literal al tipo de usuario. Esto te permite detectar el tipo del objeto usuario. Al utilizar tipos literales, puedes manejar diferentes tipos de usuarios y asegurarte de que TypeScript pueda detectarlos correctamente. Sin embargo, si la función de impresión se utiliza en producción sin TypeScript, es importante lanzar un error en tiempo de ejecución si el usuario no cumple la condición esperada. Además, el uso del tipo 'never' puede proporcionar notificaciones en tiempo de compilación si se agregan nuevos tipos de usuario en el futuro.

Dos segundos. Usuario. ¿Qué error? ¡Ah! ¡Es correcto! ¡Ah! ¡Maldición! No, esto es correcto. Lo siento. Pero... Permíteme ir aquí. Fantástico. Esto funciona. No sé por qué. ¿Cuál es la diferencia? Ah, lo siento. No. Esta es la solución, y es perfecta. Imagen, puedes... Permíteme volver atrás y darte algunos ejemplos. Lo que puedes hacer para verificar en tiempo de ejecución si la persona es una persona y la compañía es una compañía es agregar un tipo literal a nuestro tipo. Lo que sucedió aquí es básicamente que puedes tener el tipo que en tiempo de ejecución te permite detectar si la persona es una persona y la compañía es una compañía. Básicamente, lo que sucedió aquí es que puedes usar el usuario y verificar si el usuario tiene el tipo persona, puedes estar seguro de que esta persona es una persona. Si el usuario tiene el tipo compañía, puedes detectar si el usuario es una compañía. Lo que sucedió aquí, como puedes notar, el usuario ahora en esta rama es una persona real, como puedes notar, y también TypeScript puede detectarlo. Por ejemplo, como puedes notar, uso el retorno aquí, y TypeScript es tan inteligente que en esta línea, básicamente, lo que sucede es que el usuario es una compañía, porque TypeScript sabe que aquí puedes tener un usuario que puede ser una persona o una compañía. Al final, aquí, para TypeScript, el usuario puede ser solo una simple compañía, si quieres. Pero puedes implementar esta compañía si quieres, y en esta rama, es lo mismo. El usuario es una compañía. Entonces, ¿qué sucede? Es fantástico en tiempo de TypeScript, ¿de acuerdo? Porque manejas todos los tipos posibles. Pero si expones esta función de impresión en producción, alguien que básicamente no usa TypeScript puede llamar a la impresión, y tal vez el usuario no esté formateado de la mejor manera, como expresar en tu función. Lo que podemos hacer es lanzar el error, como ya sabemos, básicamente, podemos lanzar algo aquí, y en tiempo de ejecución, recibiremos un error si el usuario no cumple la condición. Pero quiero más. Quiero recibir una notificación en tiempo de compilación si, por ejemplo, alguien en el futuro decide agregar un nuevo tipo de usuario, por ejemplo, un animal, ¿de acuerdo? ¿Cómo puedo hacer esto usando el tipo 'never'? Como puedes notar aquí, el usuario es de tipo 'never'. Porque para TypeScript, ahora, si miras en el tipo, ya manejas la persona y el usuario. Entonces, básicamente, es imposible llegar a esta parte del código.

4. Handling User Types with the Never Type

Short description:

Para evitar errores, asigna el usuario al tipo 'never' si no se maneja. Agregar un nuevo tipo resultará en un error de compilación antes de la producción. Otra forma de manejar los tipos es mediante el uso de una declaración switch. Al verificar el tipo literal, TypeScript puede determinar qué tipo se está manejando.

Lo que sucedió aquí, básicamente, es que puedes asignar el usuario al tipo 'never', y esto es posible simplemente porque el usuario ahora es del tipo 'never'. Por ejemplo, si olvidaste manejar la compañía, como en este caso, como puedes notar, debería ocurrir un error. Porque aquí el usuario puede ser del tipo compañía, y no has manejado el problema. Imagina, no has manejado el tipo. Por ejemplo, si en el futuro decides agregar el tipo animal, ¿qué sucederá? Recibirás un error de compilación antes de que el código esté en producción. Si olvidas manejar la función. Y esto es fantástico. Porque puedes evitar el error antes de lanzar el código en producción. Y por eso amo TypeScript. También podemos hacer esto de otra manera. Imagina que quieres usar el switch. Sé que el switch no es la mejor estructura en JavaScript, pero también puedes hacer una verificación de tipo con un switch. Ahora, imagina que quieres crear una calculadora que básicamente acepta un usuario. Puedes verificar el tipo aquí. En el caso, tienes el beneficio del tipo literal. Entonces, básicamente aquí, TypeScript sabe que quieres manejar a todas las personas o una compañía. Ya he manejado la compañía en la línea siguiente. Entonces, TypeScript sabe que probablemente quieres manejar a la persona. Y básicamente, lo que sucede aquí, aquí el usuario es un usuario. Pero en esta rama, el usuario es una persona. Y lo mismo ocurre aquí.

5. Handling Errors and Type Checking in TypeScript

Short description:

Para manejar errores y garantizar la seguridad de tipos, utiliza el tipo 'never' para casos predeterminados y siempre devuelve un tipo en las funciones. TypeScript puede detectar si todas las ramas del código se manejan en tiempo de compilación, evitando errores en tiempo de ejecución. También puedes utilizar la comprobación de tipos en los filtros, aunque puede requerir el uso de la versión beta de TypeScript. La próxima versión abordará esta limitación, haciendo que la comprobación de tipos sea más conveniente para los desarrolladores.

Y lo mismo ocurre aquí. Luego también puedes manejar el error predeterminado, la parte predeterminada usando el 'never' si lo deseas. Pero lo que sugiero es siempre agregar el predeterminado con el tipo 'never' y generar el error. Básicamente, esa es la mejor solución porque en tiempo de ejecución, también puedes manejar si alguien llama a la función sin la forma correcta. Y la segunda opción es siempre devolver el tipo. Porque en este caso, si olvidé manejar, por ejemplo, la compañía, recibiré un error en tiempo de ejecución. En tiempo de compilación. ¿Por qué? Porque mi función tiene un bloqueo. TypeScript también puede entender si ya has manejado todas las posibles ramas de tu código. En este caso, solo manejo a la persona, por ejemplo. Y el resultado es este. Recibo una notificación durante la compilación y no en producción cuando el usuario ejecuta mi código JavaScript. Y esto es fantástico. Ahora, puedes hacer lo mismo también si quieres manejar el filtro. ¿De acuerdo? Imagina que tienes una lista de usuarios donde tienes persona, compañía o nueva persona, y quieres filtrar la lista solo por la persona. ¿Cómo? Básicamente, usando el filtro, puedes llamar directamente a tu función 'esPersona'. Vamos. Esta es la función 'esPersona', y puedes ver aquí que la persona es una lista de personas y no una lista de usuarios. Luego hay un pequeño problema. Entonces, si quiero llamar a 'usuario.tipo' igual a 'persona', como puedes notar, no funciona. ¿Por qué? Porque en esta versión de TypeScript, TypeScript no puede entender que esta es una función de tipo. Pero tenemos suerte. Y si nos movemos a la nueva versión de TypeScript, la versión beta, como puedes notar ahora, aquí, la persona es una lista de personas. Y puedes hacer lo mismo también usando el tipo igual a número, TypeScript, cadena, etc., etc. Usando, por ejemplo, una lista de números o cadenas. Y esto es fantástico porque muchas veces uno de los problemas con la versión antigua de TypeScript es que estoy seguro de que esto es una comprobación de tipos para mi usuario. En este caso, para mi tipo. Y la gente tiene que crear un tipo específico solo para pasar la función a través del filtro, por ejemplo. Pero, afortunadamente, con la próxima versión, TypeScript solucionará el problema. Y todos los desarrolladores deberían estar felices.

6. Alternative Type Handling Solution

Short description:

Para manejar el tipo de manera más efectiva, puedes usar una subfunción para continuar el flujo de código solo si el tipo cumple con la condición. De lo contrario, se genera un error. Este enfoque permite un control más preciso sobre el manejo de tipos. La implementación de la subfunción requiere el uso de una función y pasar la condición para verificar el tipo. Si la condición no se cumple, se genera un error; de lo contrario, el código continúa. Este método asegura que el tipo de usuario coincida con el tipo esperado, como 'company'.

De acuerdo. Pero también tenemos otra posible solución para manejar el tipo. Y si quieres ser, por ejemplo, más estricto, no quieres devolver un booleano, sino que quieres continuar en el flujo de tu código solo si el tipo o lo que estás verificando cumple con la condición. De lo contrario, hay un error. Podemos hacer esto usando una subfunción. Entonces, básicamente, como puedes notar aquí, he creado un usuario. Y este es un usuario simple. Lo usé solo para forzar el tipo como usuario. Y aquí el usuario es un usuario. Y si vas allí, desafortunadamente, el usuario sigue siendo un usuario. Pero quiero que el usuario en esta línea coincida con el tipo de compañía. Porque estoy seguro de que si paso por esta función, el usuario es una compañía. Ahora puedo hacer esto. Básicamente, permíteme saltar a la solución. Y evitar la codificación en vivo. Entonces, ¿qué pasó? Podemos implementar la función de esta manera. Básicamente, la función es una función. Tienes que usar una función. No puedes usar una variable que sea una función, desafortunadamente. Pero la sintaxis es esta. Dices, de acuerdo. Quiero alojarlo. Y luego tienes que pasar la condición. Por ejemplo, en este caso, quiero verificar si el usuario es una compañía. Luego, la lógica empresarial para verificar el tipo es tu negocio. TypeScript no puede saberlo. Y básicamente, en este caso, si el tipo de usuario es diferente de compañía, está bien. Genero un error. De lo contrario, continúo con el resto del código.

7. Handling Types and Branded Types

Short description:

Si en tiempo de ejecución llamas a la función asset con un tipo diferente que no sea un tipo de compañía, se genera un error. Siendo más expresivo con los tipos, puedes crear tipos específicos con reglas que se ajusten a tu dominio empresarial. Los tipos de marca en TypeScript te permiten crear tipos con campos específicos que describen el tipo de marca y hacen cumplir las reglas en tu código.

Lo que sucedió aquí, como puedes notar, aquí el usuario es un usuario. Pero si estoy aquí, el usuario es una compañía. Básicamente, si en tiempo de ejecución llamas a la función asset con un tipo diferente que no sea un tipo de compañía, se genera un error. Por favor, captura el error y envíalo a Sentry o donde quieras y revisa en Slack cuando tengamos un problema porque tienes que solucionarlo. De acuerdo. Perfecto. Esta es la primera parte. Luego, cuando tenemos esto en mente, queremos ser más expresivos con nuestro tipo. Permíteme saltar aquí y mostrar otro ejemplo. De acuerdo. Quiero crear el tipo de contraseña, el tipo de entero y el tipo de código fiscal. Luego, tal vez quiero crear el tipo de personalidad y luego también quiero crear mi tipo de persona. Fantástico. Pero básicamente, en mi dominio, la contraseña no es solo una cadena simple. Es una cadena con una regla específica. Por ejemplo, una longitud mínima de 5 y una máxima de 18 y alguna regla extraña. Un entero es un número, sí, pero es un número sin decimales. Un código fiscal es otra cadena con una regla específica. ¿Cómo podemos mostrar, cómo podemos ser más expresivos con nuestro tipo y tal vez no tener esta situación? Por ejemplo, si creo una contraseña aquí, la contraseña es una cadena simple, ¿de acuerdo? Y no quiero que la contraseña, la cadena simple, coincida con el tipo de contraseña. Quiero que alguien verifique la contraseña y convierta mi cadena en un tipo de contraseña real que describa mi dominio empresarial, ¿de acuerdo? ¿Cómo puedo hacer esto? Usando el tipo de marca. Básicamente, si salto aquí, ¿qué son los tipos de marca? Básicamente, los tipos de marca son mágicos, ¿de acuerdo? Dentro de TypeScript. Esta es una de las partes más mágicas de TypeScript. Básicamente, puedes crear una constante de marca que básicamente es algo que permite al compilador de TypeScript detectar que tienes un campo específico en tus tipos que describe el tipo de marca. Luego puedes crear tu tipo de marca que acepta tu tipo. Puedes tener una cadena, puedes tener un objeto complejo o lo que quieras. Y debes dar un nombre específico a este tipo de marca. ¿Qué significa esto? Puedes describir tu contraseña de esta manera. Básicamente, como puedes notar ahora, la contraseña no es solo una cadena simple. Es una cadena con esta sintaxis extraña que describe que esta cadena es parte del tipo de marca contraseña.

8. Using Schema-Based Validation with Zod

Short description:

La contraseña, el entero y el código fiscal no coinciden con sus respectivos tipos. Para simplificar el código, puedes usar una biblioteca de validación basada en esquemas como Zod. Esta biblioteca te permite definir código JavaScript que puede funcionar en tiempo de ejecución y también convertirse en tipos de TypeScript. Al usar esquemas, puedes hacer cumplir reglas específicas para cada tipo, como longitudes mínimas y máximas. Los esquemas se pueden convertir en tipos reales de TypeScript, lo que proporciona beneficios en tiempo de ejecución y en tiempo de compilación. Puedes usar el método schema.pass para verificar si un valor coincide con el esquema y obtener el resultado con el tipo correcto. Alternativamente, puedes usar una función de análisis segura que devuelve un tipo de unión que indica éxito o error.

Y como puedes notar aquí, la contraseña no coincide con el tipo de contraseña, por ejemplo. Lo mismo ocurre con el entero. Puedo describir mi parte entera con esta parte. Y lo mismo con el código fiscal. Luego tenemos que usar una función para convertir la contraseña en un tipo de marca específico. Lo mismo ocurre con el entero. Y al final, el resultado es este. Ya he implementado la contraseña para ti, pero puedes confiar en mí. De acuerdo. Como puedes notar, creo mucho código boilerplate. ¿Cómo puedo reducir esta parte? Básicamente, podemos usar una biblioteca que se basa en la validación de esquemas. ¿Qué significa esto? Hay bibliotecas específicas, como Zod, que te permiten crear un código JavaScript que puede funcionar en tiempo de ejecución. ¿De acuerdo? Pero también puedes convertirlo en un tipo de TypeScript. ¿Qué es todo este tipo de cosas? Básicamente, puedes crear un esquema de contraseña que comienza con Z. Z es un objeto expuesto por Zod. Bueno, puedes decir que mi esquema es una cadena que tiene un mínimo de 8, un máximo de 32 y también puedes crear tu regla de negocio específica. Puedes hacer lo mismo con la parte entera, por lo que el entero es un tipo de marca entero. También puedes usar el tipo de marca aquí. Y puedes hacer lo mismo con el código fiscal. Y puedes convertir, si quieres, tu esquema en un código de TypeScript real, en un tipo de TypeScript real, por lo que puedes tener tanto el beneficio en tiempo de ejecución como en tiempo de compilación porque básicamente, si creas un tipo, cuando compilas tu código de TypeScript, este tipo desaparece y en tiempo de ejecución, no tienes la garantía de que tus tipos sigan vivos también en ese momento. De esta manera, también puedes verificar esto en tiempo de ejecución, si quieres. Puedes hacer esto usando dos métodos diferentes. El esquema expuesto para ti, dos métodos diferentes, un método schema.pass, que básicamente es como una función de asset que devuelve el resultado con el tipo correcto, por lo que puedes pasar el esquema, como en este caso, el valor, y verificar si el valor es de este tipo, guardarás, por ejemplo, el tipo de marca de la contraseña. Como puedes notar aquí, la contraseña es una cadena. Paso por este esquema, verifico el esquema y el resultado es este. Si tu objeto no cumple la condición, guardarás un error. ¿De acuerdo? También puedes usar una especie de type guard utilizando una función de análisis segura que devuelve un tipo de unión donde el éxito es verdadero y contiene los datos con el tipo de tu objeto, o exitoso con el error. ¿Qué significa esto? Es lo mismo. Puedes crear tu función de análisis segura que acepta el esquema y el valor.

9. Validando Tipos y Migrando a TypeScript

Short description:

Puedes usar schema.safeparser para validar diferentes tipos de datos y garantizar la seguridad de tipos en tiempo de ejecución. Se pueden crear validaciones personalizadas utilizando la función refine. Migrar desde una gran base de código JavaScript a TypeScript puede ser un proceso desafiante, pero es mejor comenzar con pequeños pasos y aumentar gradualmente la rigurosidad de la configuración de TypeScript. Puede llevar tiempo, pero es una inversión valiosa en la calidad del código.

Puedes llamar a schema.safeparser y, básicamente, como puedes notar aquí, este es un tipo de marca de un resultado seguro del tipo de marca. ¿Qué significa esto? Puedes usarlo y, en este caso, si el éxito es verdadero, tienes la contraseña igual a éxito verdadero, y data es un tipo de marca de contraseña, o si es falso, tienes el tipo igual a éxito falso y el error. Lo mismo ocurre con el entero y lo mismo ocurre con el analizador. Puedes validar lo que quieras, cadena, entero, número, objeto, lo que quieras.

También puedes crear tu validación personalizada si quieres usando refine. Esto te ayuda a garantizar tus tipos también en tiempo de ejecución porque, sí, es fantástico poner el tipo número o el mismo tipo, pero en tiempo de ejecución no tenemos ninguna garantía de que este tipo siga vivo, especialmente si tu backend o tu frontend envían lo que quieran en tu API o en tu UI. Por lo tanto, puedes evitar mostrar, no sé, un número o cosas así. Con eso, he completado mi presentación. Espero que lo hayas disfrutado. Este es el código QR para la presentación, pero supongo que te gusta más este código QR que contiene el código. Por último, pero no menos importante, si quieres, en mi cuenta de DevTools, puedes encontrar algunos artículos de blog sobre TypeScript, también en mi canal de YouTube. Estos son mis contactos. Twitter y LinkedIn son gratuitos, así que si quieres enviarme un mensaje, puedes enviarme lo que quieras. Si quieres suscribirte a mi canal de YouTube y a mi cuenta de DevTools, eres libre. Espero que lo disfrutes y muchas gracias. Gracias.

La pregunta principal es, sí, ¿cuáles son tus enfoques para migrar desde una gran base de código JavaScript a TypeScript, o a otra cosa? Ok. Esta es una pregunta interesante, y lo que te digo es que es una pesadilla. Así que no seré honesto. Es una pesadilla. Sí. Pero lo que puedes hacer es intentar dar pequeños pasos. Este es el único consejo que puedo darte. Y tal vez puedas comenzar teniendo una configuración de TypeScript menos estricta. Y luego... Definitivamente no lo trates estrictamente si estás avanzando. Puedes tener la parte estricta en tu primer paso, pero avanza paso a paso y haz esto. Esto puede llevar un año. Así que no... Creo que, sí, si pones una gran S en una configuración de TypeScript, puedes mover las cosas a medida que trabajas en ellas, ¿verdad? A veces es una historia interminable.

QnA

Understanding TypeScript Documentation

Short description:

La documentación de TypeScript puede estar más orientada hacia usuarios avanzados, lo que dificulta que los recién llegados encuentren respuestas. Esto podría ser porque muchas personas que se acercan a TypeScript no están familiarizadas con él y hay una curva de aprendizaje involucrada. TypeScript no es solo JavaScript; es una parte diferente de JavaScript. Podría ser útil escribir artículos para principiantes para explicar mejor TypeScript.

Sí. Sí. Totalmente. Ah, hice eso. Correcto. Siguiente pregunta. Quería hacer eso. Ahí vamos. Pregunta rápida. ¿Crees que la documentation de TypeScript está más orientada hacia usuarios advanced que hacia recién llegados? Y si estás de acuerdo con eso, ¿por qué crees que podría ser? Sí. Sí. Desafortunadamente, sí. A veces, para entrar en la parte advanced, también es difícil encontrar respuestas. En algunos casos específicos. Creo que esto se debe a que muchas personas que se acercan a TypeScript no están muy familiarizadas con él y tratan de involucrar a todos los desarrolladores en el entorno al final. Quiero decir, es solo una curva de aprendizaje, ¿no? Sí. Sí. No es solo JavaScript. Es más que eso. Sí. Entonces no es JavaScript. No sé cómo explicar TypeScript, pero es otra parte de JavaScript. Sí. Quiero decir, si haces esa pregunta, quieres ayudar, como escribir algunos artículos para principiantes en TypeScript, si puedes explicarlo mejor. Sí.

Oh, esa pregunta acaba de saltar al principio, preguntando ¿TypeCast bueno o malo? Si estás diciendo que TypeCast es algo, evítalo, por favor. Así de malo. Lo uso solo para la demostración, porque TypeScript es capaz de entender el tipo si usas los dos puntos, no recuerdo. Si eres usuario, si eres, digamos, un usuario constante y creas el objeto en ese momento, TypeScript es capaz de inferir el tipo directamente en el tipo. Y básicamente, pierdes que es un usuario, pero al final es una persona.

Relying on Object Property-Like Type Guards

Short description:

Depender de un tipo de guardia de tipo similar a una propiedad de objeto puede ser frágil. Para garantizar el flujo de código, crea validaciones en los límites de la aplicación. Utiliza Zod para la validación en aplicaciones front-end al recibir datos de APIs o fuentes externas. El uso de 'any' en tu código es tu elección, pero ser estricto conduce a una base de código más limpia.

Bastante justo. Y creo que tenemos tiempo para una pregunta más. Creo que esta es interesante, dado que fue uno de los primeros ejemplos. ¿No es bastante frágil depender de un tipo de guardia de tipo similar a una propiedad de objeto como base de un tipo de guardia? Sí. Podría ser. Pero básicamente, esta es la única solución que tenemos en este momento en el entorno, en el ecosistema. Y lo que puedo sugerirte, básicamente, es garantizar todo el flujo de tu código, debes crear validaciones en el límite de tu aplicación. Por ejemplo, si estás en una aplicación front-end, al recibir datos de una API o de una parte externa, valídalos utilizando Zod. Así te aseguras de que la entrada de tu aplicación sea la esperada durante tu código de tipo C, y el resto del código, el flujo del resto del código, está garantizado por esta suposición al final. Luego, si estás usando 'any' en tu código, es tu decisión. Pero si eres estricto con este tipo de cosas, básicamente, el resultado es una base de código agradable al final. Sí. Correcto.

De acuerdo. Creo que eso es todo el tiempo que tenemos para preguntas aquí. Gracias de nuevo, Luca. Ahora te dirigirás al puesto de preguntas, así que si tienes más preguntas para Luca, ve a buscarlo allí. Pero sí, muchas gracias. Gracias de nuevo.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Los tipos más útiles de React
React Day Berlin 2023React Day Berlin 2023
21 min
Los tipos más útiles de React
Top Content
Today's Talk focuses on React's best types and JSX. It covers the types of JSX and React components, including React.fc and React.reactnode. The discussion also explores JSX intrinsic elements and react.component props, highlighting their differences and use cases. The Talk concludes with insights on using React.componentType and passing components, as well as utilizing the react.element ref type for external libraries like React-Select.
TypeScript y React: Secretos de un matrimonio feliz
React Advanced 2022React Advanced 2022
21 min
TypeScript y React: Secretos de un matrimonio feliz
Top Content
React and TypeScript have a strong relationship, with TypeScript offering benefits like better type checking and contract enforcement. Failing early and failing hard is important in software development to catch errors and debug effectively. TypeScript provides early detection of errors and ensures data accuracy in components and hooks. It offers superior type safety but can become complex as the codebase grows. Using union types in props can resolve errors and address dependencies. Dynamic communication and type contracts can be achieved through generics. Understanding React's built-in types and hooks like useState and useRef is crucial for leveraging their functionality.
Haciendo Magia: Construyendo un Marco de Trabajo Primero-TypeScript
TypeScript Congress 2023TypeScript Congress 2023
31 min
Haciendo Magia: Construyendo un Marco de Trabajo Primero-TypeScript
Top Content
Daniel Rowe discusses building a TypeScript-first framework at TypeScript Congress and shares his involvement in various projects. Nuxt is a progressive framework built on Vue.js, aiming to reduce friction and distraction for developers. It leverages TypeScript for inference and aims to be the source of truth for projects. Nuxt provides type safety and extensibility through integration with TypeScript. Migrating to TypeScript offers long-term maintenance benefits and can uncover hidden bugs. Nuxt focuses on improving existing tools and finds inspiration in frameworks like TRPC.
Deja de Escribir Tus Rutas
Vue.js London 2023Vue.js London 2023
30 min
Deja de Escribir Tus Rutas
Top Content
Designing APIs is a challenge, and it's important to consider the language used and different versions of the API. API ergonomics focus on ease of use and trade-offs. Routing is a misunderstood aspect of API design, and file-based routing can simplify it. Unplugging View Router provides typed routes and eliminates the need to pass routes when creating the router. Data loading and handling can be improved with data loaders and predictable routes. Handling protected routes and index and ID files are also discussed.
Compilaciones de TypeScript más rápidas con --isolatedDeclarations
TypeScript Congress 2023TypeScript Congress 2023
24 min
Compilaciones de TypeScript más rápidas con --isolatedDeclarations
Top Content
This talk discusses the performance issues in TypeScript builds and introduces a new feature called isolated declarations. By running the compiler in parallel and using isolated modules, significant performance gains can be achieved. Isolated declarations improve build speed, compatibility with other tools, and require developers to write types in code. This feature has the potential to further increase performance and may be available in TypeScript soon.
Aplicaciones React (+Native) full-stack y seguras con tRPC.io
React Advanced 2021React Advanced 2021
6 min
Aplicaciones React (+Native) full-stack y seguras con tRPC.io
Top Content
Alex introduces tRPC, a toolkit for making end-to-end type-safe APIs easily, with auto-completion of API endpoints and inferred data from backend to frontend. tRPC works the same way in React Native and can be adopted incrementally. The example showcases backend communication with a database using queries and validators, with types inferred to the frontend and data retrieval done using Prisma ORM.

Workshops on related topic

React, TypeScript y TDD
React Advanced 2021React Advanced 2021
174 min
React, TypeScript y TDD
Top Content
Featured Workshop
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
Dominando conceptos avanzados en TypeScript
React Summit US 2023React Summit US 2023
132 min
Dominando conceptos avanzados en TypeScript
Top Content
Featured WorkshopFree
Jiri Lojda
Jiri Lojda
TypeScript no es solo tipos e interfaces. Únete a esta masterclass para dominar características más avanzadas de TypeScript que harán tu código a prueba de balas. Cubriremos tipos condicionales y notación de inferencia, cadenas de plantillas y cómo mapear sobre tipos de unión y propiedades de objetos/arrays. Cada tema se demostrará en una aplicación de muestra que se escribió con tipos básicos o sin tipos en absoluto y juntos mejoraremos el código para que te familiarices más con cada característica y puedas llevar este nuevo conocimiento directamente a tus proyectos.
Aprenderás:- - ¿Qué son los tipos condicionales y la notación de inferencia?- ¿Qué son las cadenas de plantillas?- Cómo mapear sobre tipos de unión y propiedades de objetos/arrays.
Consejos y Trucos Profundos de TypeScript
Node Congress 2024Node Congress 2024
83 min
Consejos y Trucos Profundos de TypeScript
Top Content
Featured Workshop
Josh Goldberg
Josh Goldberg
TypeScript tiene un sistema de tipos poderoso con todo tipo de características sofisticadas para representar estados de JavaScript salvajes y extravagantes. Pero la sintaxis para hacerlo no siempre es sencilla, y los mensajes de error no siempre son precisos al decirte qué está mal. Vamos a profundizar en cómo funcionan muchas de las características más poderosas de TypeScript, qué tipos de problemas del mundo real resuelven, y cómo dominar el sistema de tipos para que puedas escribir código TypeScript verdaderamente excelente.
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
React Advanced 2022React Advanced 2022
148 min
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
¿Eres un desarrollador de React tratando de obtener los máximos beneficios de TypeScript? Entonces esta es la masterclass para ti.En esta masterclass interactiva, comenzaremos desde lo básico y examinaremos los pros y contras de las diferentes formas en que puedes declarar componentes de React usando TypeScript. Después de eso, pasaremos a conceptos más avanzados donde iremos más allá de la configuración estricta de TypeScript. Aprenderás cuándo usar tipos como any, unknown y never. Exploraremos el uso de predicados de tipo, guardias y comprobación exhaustiva. Aprenderás sobre los tipos mapeados incorporados, así como cómo crear tus propias utilidades de mapa de tipo nuevo. Y comenzaremos a programar en el sistema de tipos de TypeScript usando tipos condicionales e inferencia de tipos.
Practica Técnicas de TypeScript Construyendo una Aplicación con Componentes de Servidor React
TypeScript Congress 2023TypeScript Congress 2023
131 min
Practica Técnicas de TypeScript Construyendo una Aplicación con Componentes de Servidor React
Workshop
Maurice de Beijer
Maurice de Beijer
En esta masterclass práctica, Maurice te guiará personalmente a través de una serie de ejercicios diseñados para empoderarte con una profunda comprensión de los Componentes de Servidor React y el poder de TypeScript. Descubre cómo optimizar tus aplicaciones, mejorar el rendimiento y desbloquear nuevas posibilidades.
 
Durante la masterclass, realizarás:
- Maximizar la mantenibilidad y escalabilidad del código con prácticas avanzadas de TypeScript
- Desatar los beneficios de rendimiento de los Componentes de Servidor React, superando enfoques tradicionales
- Potenciar tu TypeScript con el poder de los Tipos Mapeados
- Hacer tus tipos TypeScript más seguros con Tipos Opacos
- Explorar el poder de los Tipos de Plantillas Literales al usar Tipos Mapeados
 
Maurice estará virtualmente a tu lado, ofreciendo una guía completa y respondiendo a tus preguntas mientras navegas por cada ejercicio. Al final de la masterclass, habrás dominado los Componentes de Servidor React, armado con un nuevo arsenal de conocimientos de TypeScript para potenciar tus aplicaciones React.
 
No pierdas esta oportunidad de elevar tu experiencia en React a nuevas alturas. Únete a nuestra masterclass y desbloquea el potencial de los Componentes de Servidor React con TypeScript. Tus aplicaciones te lo agradecerán.
Tipos avanzados de TypeScript para diversión y confiabilidad
TypeScript Congress 2022TypeScript Congress 2022
116 min
Tipos avanzados de TypeScript para diversión y confiabilidad
Workshop
Maurice de Beijer
Maurice de Beijer
Si estás buscando sacar el máximo provecho de TypeScript, este masterclass es para ti! En este masterclass interactivo, exploraremos el uso de tipos avanzados para mejorar la seguridad y previsibilidad de tu código TypeScript. Aprenderás cuándo usar tipos como unknown o never. Exploraremos el uso de predicados de tipo, guardias y verificación exhaustiva para hacer tu código TypeScript más confiable tanto en tiempo de compilación como en tiempo de ejecución. Aprenderás sobre los tipos mapeados incorporados, así como cómo crear tus propias utilidades de mapeo de tipos. Y comenzaremos a programar en el sistema de tipos de TypeScript utilizando tipos condicionales e inferencia de tipos.
¿Estás familiarizado con los conceptos básicos de TypeScript y quieres profundizar? Entonces únete a mí con tu computadora portátil en este masterclass avanzado e interactivo para aprender todos estos temas y más.
Puedes encontrar las diapositivas, con enlaces, aquí: http://theproblemsolver.nl/docs/ts-advanced-workshop.pdf
Y el repositorio que utilizaremos está aquí: https://github.com/mauricedb/ts-advanced