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>>>; // stringTipos 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[][][]>; // stringInferencia 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>>>; // numberTipos 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[][][]>; // numberRecursió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]>; // 3Lí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 chainsInferencia 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 | booleanInferencia 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?
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
- 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