Saltar al contenido principal
eLearner.app
Módulo 6 · Lección 1 de 211/14 en el curso~15 min
Lecciones del módulo (1/2)

Tipos Condicionales e infer

Los tipos condicionales permiten expresar decisiones de tipo no triviales basándose en relaciones de herencia. La sintaxis se asemeja a la del operador ternario de JavaScript:

TS
T extends U ? X : Y

Si el tipo T se puede asignar a U, entonces el tipo resultante será X, de lo contrario será Y.


Tipos condicionales básicos

Un tipo condicional evalúa una condición a nivel de tipo de forma estática:

TS
type IsNumber<T> = T extends number ? true : false;

type A = IsNumber<number>; // true
type B = IsNumber<string>; // false

Este patrón es extremadamente potente cuando se combina con genéricos para crear tipos de utilidad flexibles y dinámicos.


Extracción de tipos con infer

Dentro de la cláusula extends de un tipo condicional, podemos usar la palabra clave infer para declarar una variable de tipo que debe ser deducida por el compilador.

Por ejemplo, si queremos extraer el tipo devuelto por una función:

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

type FunzioneEsempio = () => string;
type Ritorno = GetReturnType<FunzioneEsempio>; // string

En este ejemplo, infer R le indica a TypeScript que deduzca automáticamente el tipo de retorno de la función y lo ponga a disposición como R en la rama positiva del condicional.


Pruébalo tú mismo

Ejercicio 1: El tipo IsString

Ejercicio#ts.m6.l1.e1
Intentos: 0Cargando...

Crea un tipo genérico llamado IsString<T> que devuelva el tipo literal true si T extiende string, de lo contrario false.

Cargando editor...
Mostrar pista

Usa la sintaxis type IsString<T> = T extends string ? true : false; para comprobar el tipo.

Solución disponible después de 3 intentos

Ejercicio 2: Extraer el tipo de un Array con infer

Ejercicio#ts.m6.l1.e2
Intentos: 0Cargando...

Define un tipo genérico UnpackArray<T> que use infer para extraer el tipo de los elementos de un array T. Si T es un array (por ejemplo, U[]), devuelve U, de lo contrario devuelve el mismo tipo T.

Cargando editor...
Mostrar pista

Usa T extends (infer U)[] ? U : T para declarar y devolver la variable de tipo deducida U.

Solución disponible después de 3 intentos