0Pricing
TypeScript Academy · Lección

Patrones de inferencia profundamente anidados

Aplique infer de forma recursiva para extraer tipos complejos.

Patrones de inferencia profundamente anidados es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 3 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.

¿Por qué realizar inferencias profundas?

A veces, el tipo que necesita está oculto dentro de varias capas de tipos genéricos. La inferencia profunda usa tipos condicionales recursivos o encadenados para llegar hasta él.

type DeepUnwrap<T> =
  T extends Promise<infer U>
    ? DeepUnwrap<U>
    : T;

type A = DeepUnwrap<Promise<Promise<string>>>; // string

Tipos condicionales recursivos

TypeScript 4.1+ admite tipos condicionales recursivos, lo que permite retirar las capas de envoltorios una a una.

type Flatten<T> = T extends Array<infer U> ? Flatten<U> : T;
type B = Flatten<string[][][]>; // string

Inferencia a partir de genéricos anidados

Puede encadenar varias variables infer en una única cláusula extends para capturar varias capas a la vez.

type InnerValue<T> =
  T extends Map<any, infer V>
    ? V extends Set<infer S>
      ? S
      : V
    : T;
type C = InnerValue<Map<string, Set<number>>>; // number

Tipos de propiedades profundas de objetos

Los tipos recursivos pueden recorrer las estructuras de objetos para extraer tipos de propiedades profundamente anidadas.

type DeepGet<T, K extends keyof T> =
  T[K] extends object ? T[K] : never;

type Nested = { user: { profile: { name: string } } };
type Profile = DeepGet<Nested, "user">; // { profile: { name: string } }

Extracción profunda de tipos de elementos de arrays

Combinar el desenvolvimiento recursivo con el manejo de arrays permite cubrir cualquier profundidad de anidamiento.

type ElementType<T> = T extends (infer U)[] ? ElementType<U> : T;
type D = ElementType<number[][][]>; // number

Recursión de cola en tuplas

La manipulación recursiva de la cola de tuplas es un patrón habitual para crear tipos de canalizaciones y de composición de funciones seguros en cuanto a tipos.

type Last<T extends any[]> =
  T extends [...infer _, infer L] ? L : never;
type E = Last<[1, 2, 3]>; // 3

Límites de profundidad y consideraciones prácticas

TypeScript limita la profundidad de recursión para evitar bucles infinitos. Mantenga la recursión poco profunda y considere establecer un límite mediante un contador de profundidad cuando sea necesario.

// Deep recursion may hit "Type instantiation is excessively deep"
// Simplify or use branded types to break deep chains

Inferencia en la distribución de uniones

Cuando T es una unión, los tipos condicionales se distribuyen: cada miembro se compara por separado y los resultados se combinan en una unión.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type F = Unwrap<Promise<string> | Promise<number> | boolean>;
// string | number | boolean

Inferencia de tuplas rest

Los patrones de tuplas rest con infer permiten descomponer la cabeza y la cola, así como manipular tipos variádicos.

type Init<T extends any[]> =
  T extends [...infer I, any] ? I : never;
type G = Init<[1, 2, 3, 4]>; // [1, 2, 3]

Ejemplo real: respuesta de API anidada

Puede desenvolver una respuesta de API anidada hasta obtener su tipo de datos mediante infer encadenado.

type ApiResponse<T> = { data: T; status: number };
type UnwrapApi<T> = T extends ApiResponse<infer D> ? D : T;
type H = UnwrapApi<ApiResponse<{ users: string[] }>>; // { users: string[] }

Recapitulación: inferencia profunda

La inferencia profunda combina tipos condicionales recursivos, varias variables infer y coincidencias de patrones estructurales para extraer tipos de estructuras genéricas anidadas a cualquier profundidad.

Comprobación rápida

¿Qué devuelve Flatten si Flatten = T extends Array ? Flatten : T?

Lo que ha aprendido

La inferencia profunda de tipos anidados utiliza tipos condicionales recursivos y patrones infer encadenados para llegar a tipos ocultos dentro de varios envoltorios genéricos. Mantenga limitada la recursión para evitar los límites de profundidad de TypeScript.

Preguntas frecuentes

¿La lección «Patrones de inferencia profundamente anidados» es gratis?

Sí — el texto completo de «Patrones de inferencia profundamente anidados» 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 «Patrones de inferencia profundamente anidados»?

Aplique infer de forma recursiva para extraer tipos complejos. 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 3 de 4.

¿Cuánto tiempo toma la lección «Patrones de inferencia profundamente anidados»?

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