0Pricing
TypeScript Academy · Lección

Comprender infer en tipos condicionales

Extraiga tipos internos mediante infer en cláusulas extends.

Comprender infer en tipos condicionales es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 1 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.

¿Qué es infer?

La palabra clave infer aparece dentro de los tipos condicionales y permite a TypeScript capturar una variable de tipo desde la posición coincidente para poder usarla en la rama verdadera.

type GetReturn<T> = T extends (...args: any[]) => infer R ? R : never;

Ejemplo básico de infer

Aquí extraemos el tipo de retorno de cualquier función mediante infer R.

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type A = ReturnType<() => string>;  // string
type B = ReturnType<() => number[]>; // number[]

Cómo funciona infer

TypeScript compara la estructura de T con el patrón. Si coincide, la variable inferida contiene la parte coincidente. Si no, se toma la rama falsa.

type First<T> = T extends [infer F, ...any[]] ? F : never;
type X = First<[string, number, boolean]>; // string

Inferencia a partir de parámetros genéricos

Puede inferir el argumento de tipo de un tipo genérico, por ejemplo, extraer T de Promise.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type A = Unwrap<Promise<string>>; // string
type B = Unwrap<number>;          // number

Varias variables infer

Puede usar varias cláusulas infer en un único tipo condicional para capturar varias posiciones a la vez.

type Head<T> = T extends [infer H, ...infer Tail] ? H : never;
type Tail<T> = T extends [infer H, ...infer Tail] ? Tail : never;

infer en los parámetros de función

infer también puede capturar tipos de parámetros de función, no solo tipos de retorno.

type FirstParam<T> = T extends (first: infer P, ...rest: any[]) => any ? P : never;
type A = FirstParam<(x: string, y: number) => void>; // string

Comportamiento distributivo con infer

Cuando T es una unión, los tipos condicionales, incluidos los que usan infer, se distribuyen entre cada miembro de la unión.

type UnwrapAll<T> = T extends Promise<infer U> ? U : T;
type X = UnwrapAll<Promise<string> | Promise<number>>;
// string | number

Inferencia anidada con infer

Puede anidar infer para llegar a niveles más profundos de una estructura de tipos, por ejemplo, para extraer el tipo de valor de un array dentro de una promesa.

type UnwrapPromiseArray<T> =
  T extends Promise<infer U>
    ? U extends (infer V)[]
      ? V
      : U
    : T;

infer con patrones de cadenas

Los tipos de literales de plantilla combinados con infer permiten extraer subcadenas de tipos de literales de cadena.

type GetDomain<T extends string> =
  T extends `https://${infer Domain}` ? Domain : never;
type D = GetDomain<"https://example.com">; // "example.com"

Errores comunes

infer solo funciona dentro de la cláusula extends de un tipo condicional. Usarlo en otro lugar provoca un error de compilación. Además, infer no está disponible en la rama falsa.

// Error: infer can only appear in extends clauses
type Bad<T> = infer R; // SyntaxError

Recapitulación: infer

La palabra clave infer permite a TypeScript capturar un fragmento de tipo a partir de una coincidencia estructural en un tipo condicional. Es la base de tipos de utilidad como ReturnType, Parameters y Awaited.

Comprobación rápida

¿Dónde se puede usar la palabra clave infer?

Lo que ha aprendido

La palabra clave infer permite hacer coincidencias de patrones a nivel de tipos al extraer fragmentos de tipo de patrones estructurales. Es la base de los tipos de utilidad avanzados y de la metaprogramación segura a nivel de tipos en TypeScript.

Preguntas frecuentes

¿La lección «Comprender infer en tipos condicionales» es gratis?

Sí — el texto completo de «Comprender infer en tipos condicionales» 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 «Comprender infer en tipos condicionales»?

Extraiga tipos internos mediante infer en cláusulas extends. 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 1 de 4.

¿Cuánto tiempo toma la lección «Comprender infer en tipos condicionales»?

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