Inferir varias cosas a la vez con tipos mapeados inversos

Rate this content
Bookmark

Aprende sobre la inferencia con tipos mapeados inversos para crear grandes inferencias para argumentos que agregan diferentes elementos de la misma forma. La técnica puede ayudarte a introducir relaciones a nivel de tipo dentro de objetos y tuplas. La masterclass comenzará con la introducción a la técnica y repasará un par de ejemplos similares al mundo real de cómo esto se puede utilizar para mejorar los tipos de biblioteca.

FAQ

Mateusz Kruzynski trabaja en Stately, enfocándose en máquinas de estado y temas relacionados. Además, mantiene varios proyectos de código abierto populares como Emotion, Redux Saga, ChangeSets, XState y contribuye ocasionalmente a TypeScript.

Los tipos de mapa en TypeScript son una función a nivel de tipo que acepta una unión de claves y produce un tipo de objeto. Son útiles para transformar los valores de las propiedades de los objetos y desde TypeScript 4.1 también permiten transformar las claves de las propiedades.

La función 'promiseify' en TypeScript itera sobre la clave de un tipo 't' y envuelve la clave actual de 't' con una función que devuelve una promesa de ese tipo, transformando así el objeto en un tipo de objeto RPC.

Los tipos de mapa inverso en TypeScript permiten determinar la entrada necesaria para una transformación específica en un tipo de salida. Son útiles para realizar inferencias sobre la entrada a partir de la transformación conocida y el resultado final.

En TypeScript, se puede utilizar una función a nivel de tipo que itera sobre las claves de un tipo 't', generando una función que recibe 'k' como su parámetro de nombre. Esto permite vincular dinámicamente los nombres de los parámetros a las claves correspondientes de un objeto, facilitando la inferencia de tipos.

Un ejemplo práctico de tipos de mapa inverso es su uso en la gestión de eventos, donde se puede vincular tipos de eventos específicos a los oyentes correspondientes, asegurando que cada oyente maneje solo el tipo de evento que le corresponde, mejorando la precisión y la experiencia del desarrollador.

Mateusz Burzyński
Mateusz Burzyński
26 min
21 Sep, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Mateusz Kruzynski presenta los tipos mapeados inversos y demuestra su uso en la transformación de tipos de objeto. Discute cómo los tipos mapeados inversos se pueden utilizar para la inferencia y para proporcionar tipos contextuales para los tipos de parámetros. También muestra cómo los tipos mapeados inversos se pueden utilizar para extender una entidad y vincular oyentes de eventos. En el contexto de las máquinas de estado, explica cómo los tipos mapeados inversos se pueden utilizar para tipificar fuertemente la propiedad inicial y crear máquinas de estado jerárquicas. Sin embargo, hay limitaciones a tener en cuenta, como inferir una sola cosa por propiedad de objeto o elemento de tupla.

1. Introducción a los Tipos de Mapa Inverso

Short description:

Mi nombre es Mateusz Kruzynski. Trabajo en Stately y mantengo proyectos de código abierto populares como Emotion, Redux Saga, ChangeSets, XState, y contribuyo a TypeScript. Hoy, hablaré sobre la inferencia de varias cosas a la vez con tipos de mapa inverso. Los tipos de mapa son funciones a nivel de tipo que transforman los tipos de objeto. Pueden transformar los valores de las propiedades y las claves de las propiedades. Veamos un ejemplo con la transformación del tipo de objeto utilizando la función de identidad.

Mi nombre es Mateusz Kruzynski. Trabajo en Stately, donde trabajamos en máquinas de estado y todas las cosas relacionadas con eso. También mantengo un par de proyectos de código abierto populares, como Emotion, Redux Saga, ChangeSets, XState, obviamente, y también contribuyo a TypeScript de vez en cuando. Y me gustaría contarles hoy más sobre la inferencia de varias cosas a la vez con tipos de mapa inverso. Entonces, comencemos con un breve resumen de lo que realmente son los tipos de mapa. Entonces, son algo así como una función a nivel de tipo y aceptan una unión de claves, producen un tipo de objeto, y son muy útiles para la transformación del tipo de objeto. Se utilizan comúnmente para transformar los valores de las propiedades del objeto, pero desde TypeScript 4.1 también es posible transformar las claves de las propiedades del objeto. Entonces, en cierto sentido, solo tenemos nuestra x, nuestra entrada n, y la transformamos en nuestra y con cualquier transformación que la sintaxis de TypeScript nos permita. Entonces, veamos un breve ejemplo. Definimos que nuestra entrada es un tipo de objeto con dos propiedades, foo y bar, y ambas tienen tipos diferentes. Entonces, también definimos nuestro tipo de función. Este es solo identidad. Y podemos ver cómo se ve la sintaxis para ello. Ponemos en corchetes nuestra k. Eso es como nuestra i en un bucle for. Entonces, podemos usar eso para buscar esa propiedad en nuestro parámetro de tipo t y usar ese valor de alguna manera. Aquí, simplemente tomamos lo mismo y lo devolvemos. Ahora, podemos intentar llamarlo a nivel de tipo, y el punto es que deberíamos ser, deberíamos obtener realmente la misma cosa solo

2. Tipos de Mapa Inverso e Inferencia

Short description:

Echemos un vistazo a algo más útil en la práctica. Definimos una función a nivel de tipo llamada promiseify, que envuelve una clave de t con una función que devuelve una promesa de ese tipo. Los tipos de mapa inverso se ocupan de la transformación de X a Y, donde conocemos la transformación y la salida Y, e intentamos averiguar la entrada X. Esto es útil para la inferencia. Podemos definir objetos y proporcionar tipos contextuales para los tipos de parámetros utilizando funciones a nivel de tipo.

de vuelta. Entonces, podemos inspeccionar eso, y sí, este es exactamente el mismo tipo. Tal vez echemos un vistazo a algo un poco más útil en la práctica. Podemos definir otra función a nivel de tipo. Esta se llama promiseify, y hacemos algo muy similar. Iteramos sobre la clave de t con nuestra k, y simplemente envolvemos la k actual de t con una función que devuelve una promesa de ese tipo. Así que reutilizamos nuestro tipo de objeto anterior y lo tratamos como una especie de objeto RPC aquí. Ahora podemos intentar usarlo en runtime, podemos encadenar el método bar de él, y luego podemos ver que realmente podemos usarlo, por lo que es una promesa, y en el callback recibimos nuestro valor. Y al inspeccionar, podemos ver que esta propiedad bar es efectivamente una función que devuelve una promesa de número y val se resuelve con éxito a un tipo de número.

Entonces, ¿qué son los tipos de mapa inverso y cómo se relacionan con lo que acabamos de discutir? Así que con los tipos de mapa inverso, la situación es solo un poco diferente porque todavía tratamos con una transformación de X a Y. Pero esta vez está un poco invertido porque lo que sabemos es la transformación en sí y el resultado final, nuestra salida Y. Y lo que estamos tratando de averiguar es lo que obtuvimos como entrada para satisfacer esta transformación en Y. Así que intentamos averiguar cuál es nuestra entrada, cuál es nuestra X aquí. ¿Y para qué sirve esto realmente? Es útil para la inferencia. Kensi.s preguntó en Twitter cómo se puede hacer este tipo de cosas y esto inspiró esta charla. Así que echemos un vistazo a este ejemplo. Así que la pregunta aquí es cómo puede intentar definir un objeto y proporcionarle algún tipo contextual para los tipos de parámetros y esas diferentes claves para resolver a esas mismas claves. Entonces, en el método A, ¿cómo podemos resolver el nombre del parámetro a A y cómo podemos hacer lo mismo para B y cómo podemos resolver el nombre allí para ser. Así que esto realmente no se puede hacer con satisfies porque satisfies no participa en la inferencia y realmente no podemos crear un candidato para ello aquí pero podemos hacerlo con funciones así que veamos cómo podemos hacerlo aquí. Así que primero definamos una función a nivel de tipo satisfy name para parecerse a lo que teníamos en la diapositiva anterior y esta es esta misma operación iteramos sobre la clave de T con K y simplemente producimos una función que recibe K como su parámetro de nombre y puede devolver libremente cualquier cosa porque su tipo de retorno está tipado como void. Ahora, para utilizarlo realmente, necesitamos introducir una función, la llamamos satisfy object name y reutilizamos esa función a nivel de tipo que acabamos de declarar anteriormente. Y la parte complicada es que ahora aquí ese objeto literal que pasamos a la función satisfy object name es una especie de nuestra salida y necesitamos que el motor de inferencia de TypeScript tenga que revertir lo que podría ser la entrada para esto. Así que podemos ver que realmente puede hacer eso, como podemos resolver el rompecabezas de Kant y podemos resolver esas claves aquí para esos tipos de parámetros y podemos buscarlo en la función satisfyObjectName que efectivamente infirió con éxito algún objeto de entrada que si lo proporcionamos entre los corchetes angulares utilizados como un explícito parámetro de tipo podríamos pasar de este objeto a esta salida que hemos visto como un argumento pasado a la función satisfyObjectName. Continuemos con un ejemplo más avanzado de la función provideValue y de nuevo declaramos una función a nivel de tipo aquí y esta vez ponemos k de t en la propiedad val de toda esta plantilla de este tipo mapeado y también introducimos una nueva propiedad que es un cb que significa callback y usamos esa misma k de t aquí como en una función por lo que deberíamos ser capaces de resolver a lo que se ha utilizado como la propiedad val. Deberíamos ser capaces de usar eso como el tipo de parámetro para esta función y ahora podemos ver que efectivamente es capaz de averiguar que debería usar ese tipo específico de propiedad de valor para a y b las claves de nivel superior de este objeto de entrada y podemos ver que aquí fue capaz de comprimir todo este objeto en una forma más sencilla para responder de nuevo a la pregunta de qué podría ser la entrada para satisfacer toda esta operación de mapeo y para que esta salida sea producida aquí he resaltado aquí esos lugares aquí que fueron utilizados para crear este objeto de entrada y si echamos un vistazo a nuestra plantilla en el tipo mapeado veríamos que esos lugares se relacionan exactamente con nuestra plantilla y que TypeScript fue capaz de ingeniería inversa de alguna manera ese tipo de entrada. Continuemos con otro ejemplo. Esta vez declaramos algo, digamos, una entidad database, usuario que tiene tres propiedades, nombre, apellido y edad. De nuevo, definimos nuestra plantilla para nuestro tipo de mapa y aquí especificamos algunos requisitos para toda la transformación y la propiedad needs. Noten que esto puede ser cualquier cosa aquí, realmente no nos importa lo que será, lo usaremos de una manera específica pero en este punto está sin vincular y en realidad podría resolver a cualquier cosa. Pero lo que pongamos en esta propiedad needs será utilizado en la propiedad compute y esta vez elegimos del usuario objeto, clave de esta k de t que se resuelve a nuestra propiedad needs en este lugar muy específico y lo intersectamos con la clave del usuario. Este es un truco ingenioso para filtrar esas propiedades porque lo que pongamos en la propiedad needs deberían ser propiedades del usuario objeto de usuario. Así que al intersectar esos requisitos en la posición needs con las claves reales del usuario creamos un conjunto común de esas dos cosas por lo que es como filtrar en el mapa en el

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

Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Concurrent React y Server Components están cambiando la forma en que pensamos sobre el enrutamiento, la renderización y la obtención de datos en las aplicaciones web. Next.js recientemente compartió parte de su visión para ayudar a los desarrolladores a adoptar estas nuevas características de React y aprovechar los beneficios que desbloquean.En esta charla, exploraremos el pasado, presente y futuro del enrutamiento en las aplicaciones de front-end y discutiremos cómo las nuevas características en React y Next.js pueden ayudarnos a arquitectar aplicaciones más eficientes y con más funciones.
TypeScript y React: Secretos de un matrimonio feliz
React Advanced Conference 2022React Advanced Conference 2022
21 min
TypeScript y React: Secretos de un matrimonio feliz
Top Content
TypeScript y React son inseparables. ¿Cuál es el secreto de su exitosa unión? Bastante código extrañamente extraño. Aprende por qué useRef siempre se siente extraño, cómo manejar los genéricos en los hooks personalizados y cómo los tipos de unión pueden transformar tus componentes.
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
No pensamos en React como si tuviera sus propios tipos. Pero los tipos de React son una parte fundamental del marco de trabajo - supervisados por el equipo de React, y coordinados con las principales lanzamientos de React.En esta charla de codificación en vivo, veremos todos los tipos que te has estado perdiendo. ¿Cómo obtienes el tipo de props de un componente? ¿Cómo sabes qué ref toma un componente? ¿Deberías usar React.FC? ¿Y qué pasa con JSX.Element?Te irás con un montón de ideas emocionantes para llevar a tus aplicaciones de React, y esperamos que con una nueva apreciación por las maravillas de React y TypeScript trabajando juntos.
Deja de Escribir tus Rutas
Vue.js London 2023Vue.js London 2023
30 min
Deja de Escribir tus Rutas
Cuanto más trabajas en una aplicación, más complicado se vuelve su enrutamiento y más fácil es cometer un error. "¿Se llamaba la ruta usuarios o usuario?", "¿Tenía un parámetro id o era userId?". Si solo TypeScript pudiera decirte cuáles son los nombres y parámetros posibles. Si solo no tuvieras que escribir una sola ruta más y dejar que un complemento lo haga por ti. En esta charla repasaremos lo que se necesitó para traer rutas automáticamente tipadas para Vue Router.
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
Voy a profundizar en los internos de Nuxt para describir cómo hemos construido un marco de trabajo primero-TypeScript que está profundamente integrado con el IDE del usuario y la configuración de comprobación de tipos para ofrecer seguridad de tipo de pila completa de extremo a extremo, sugerencias para diseños, middleware y más, opciones de configuración de tiempo de ejecución tipadas e incluso enrutamiento tipado. Además, destacaré lo que más me emociona hacer en los días venideros y cómo TypeScript hace eso posible no solo para nosotros sino para cualquier autor de bibliotecas.
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
La verificación de tipos en una base de código TypeScript puede ser lenta, especialmente para monorepos que contienen muchos proyectos que necesitan usar el verificador de tipos para generar archivos de declaración de tipos. En esta charla, presentamos, por primera vez, una nueva característica de TypeScript en la que estamos trabajando llamada “Declaraciones Aisladas” que permite que los archivos DTS se generen sin usar el verificador de tipos en absoluto. ¡Esto abre la puerta a una generación de declaraciones más rápida en TypeScript mismo, así como en herramientas externas escritas en otros lenguajes como ESBuild y swc. Verás cómo usar esta nueva opción, y tal vez (solo tal vez) te convencerás de los beneficios de los tipos de retorno explícitos. Lo más importante, mostraremos cómo las Declaraciones Aisladas permiten compilaciones paralelas para distribuir el trabajo a través de tus núcleos de CPU para mejorar significativamente la velocidad de compilación de tus proyectos TypeScript.

Workshops on related topic

React, TypeScript y TDD
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript y TDD
Top Content
Featured WorkshopFree
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.
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
React Advanced Conference 2022React Advanced Conference 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.
Consejos y Trucos Profundos de TypeScript
Node Congress 2024Node Congress 2024
83 min
Consejos y Trucos Profundos de TypeScript
Top Content
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.
Master Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Master Patrones de JavaScript
Workshop
Adrian Hajdin
Adrian Hajdin
Durante este masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debe conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final del masterclass, los participantes ganarán confianza en su capacidad para escribir código JavaScript de alta calidad que perdure en el tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento profesional y las oportunidades de avance en la industria del software
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