TypeScript Academy · Lección

Casos prácticos de infer: desenvolver Promises

Desenvuelva tipos Promise, Array y wrappers personalizados.

Lección 4 de 413 pasos

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>;          // number

Tipo 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 automatically

Desenvolvimiento 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>>>; // number

Desenvolvimiento 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[]>; // number

Desenvolvimiento 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>>; // User

Desenvolvimiento 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>>; // User

Desenvolvimiento 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[]>>; // User

Desenvolvimiento 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>;          // boolean

Wrapper 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>>>; // User

Desenvolvimiento 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>; // number

Recapitulació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.

Gratis para empezar

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

  1. Comprender infer en tipos condicionales
  2. Creación de ReturnType y Parameters desde cero
  3. Patrones de inferencia profundamente anidados
  4. Casos prácticos de infer: desenvolver Promises
← Volver a TypeScript Academy