Casos prácticos de infer: desenvolver Promises
Desenvuelva tipos Promise, Array y wrappers personalizados.
Casos prácticos de infer: desenvolver Promises es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.
El problema de desenvolver tipos
Al trabajar con código asíncrono, a menudo recibe Promise y necesita el T subyacente. La palabra clave infer hace que esta extracción sea reutilizable.
type Awaited<T> = T extends Promise<infer U> ? U : T;
type A = Awaited<Promise<string>>; // string
type B = Awaited<number>; // numberTipo de utilidad Awaited integrado
TypeScript 4.5 introdujo el tipo integrado Awaited, que gestiona las promesas anidadas de forma recursiva.
type A = Awaited<Promise<Promise<string>>>; // string
// Handles arbitrary nesting automaticallyDesenvolvimiento con profundidad personalizada
Antes de que Awaited se incorporara al lenguaje, los desarrolladores usaban tipos recursivos con infer para desenvolver promesas.
type DeepAwaited<T> =
T extends Promise<infer U> ? DeepAwaited<U> : T;
type A = DeepAwaited<Promise<Promise<number>>>; // numberDesenvolvimiento de elementos de arrays
El mismo patrón infer extrae el tipo de elemento de un array, equivalente al enfoque integrado T[number].
type Element<T> = T extends (infer U)[] ? U : never;
type A = Element<string[]>; // string
type B = Element<number[]>; // numberDesenvolvimiento de tipos Observable
Para los Observables de RxJS, infer extrae el tipo emitido.
type ObservableType<T> = T extends Observable<infer U> ? U : never;
type A = ObservableType<Observable<User>>; // UserDesenvolvimiento del retorno de funciones
Combine ReturnType y Awaited para obtener el valor resuelto de una función asíncrona.
async function getUser(): Promise<User> { /* ... */ }
type UserResult = Awaited<ReturnType<typeof getUser>>; // UserDesenvolvimiento de envoltorios anidados
Puede encadenar infer para gestionar tipos envueltos en varias capas, como Promise.
type UnwrapPromiseArray<T> =
T extends Promise<infer U>
? U extends (infer V)[]
? V
: U
: T;
type A = UnwrapPromiseArray<Promise<User[]>>; // UserDesenvolvimiento condicional según la estructura
Use infer para desenvolver condicionalmente solo ciertos tipos y dejar los demás sin cambios.
type MaybeUnwrap<T> =
T extends Promise<infer U> ? U : T extends (infer V)[] ? V : T;
type A = MaybeUnwrap<Promise<string>>; // string
type B = MaybeUnwrap<number[]>; // number
type C = MaybeUnwrap<boolean>; // booleanWrapper tipado para obtener datos de una API
Un wrapper genérico para fetch que devuelve el tipo de datos resuelto es una aplicación clásica del desenvolvimiento basado en infer.
async function fetchData<T>(url: string): Promise<T> {
const res = await fetch(url);
return res.json() as T;
}
type UserData = Awaited<ReturnType<typeof fetchData<User>>>; // UserDesenvolvimiento seguro frente a errores
El patrón Result combinado con infer permite extraer el tipo de éxito de una unión discriminada.
type Ok<T> = { ok: true; value: T };
type Err = { ok: false; error: string };
type ExtractOk<T> = T extends Ok<infer V> ? V : never;
type A = ExtractOk<Ok<number> | Err>; // numberRecapitulación: desenvolvimiento con infer
La palabra clave infer es una navaja suiza para extraer tipos de envoltorios: promesas, arrays, Observables y tipos Result. El tipo integrado Awaited gestiona el desenvolvimiento asíncrono; use tipos personalizados para otras estructuras.
Comprobación rápida
¿Cuál es la mejor manera de obtener el tipo del valor resuelto de una función asíncrona?
Lo que ha aprendido
La extracción de tipos basada en infer es una herramienta práctica para el código TypeScript asíncrono. Use el tipo integrado Awaited para las promesas y cree tipos personalizados para desenvolver arrays, Observables y patrones Result.
Aprende TypeScript con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 101
- Lecciones
- 352
Preguntas frecuentes
¿La lección «Casos prácticos de infer: desenvolver Promises» es gratis?
Sí — el texto completo de «Casos prácticos de infer: desenvolver Promises» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Casos prácticos de infer: desenvolver Promises»?
Desenvuelva tipos Promise, Array y wrappers personalizados. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar TypeScript Academy?
No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Casos prácticos de infer: desenvolver Promises»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?
Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Comprender infer en tipos condicionales
- Creación de ReturnType y Parameters desde cero
- Patrones de inferencia profundamente anidados
- Casos prácticos de infer: desenvolver Promises