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:
T extends U ? X : YSi 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:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseEste 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:
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type FunzioneEsempio = () => string;
type Ritorno = GetReturnType<FunzioneEsempio>; // stringEn 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
Crea un tipo genérico llamado IsString<T> que devuelva el tipo literal true si T extiende string, de lo contrario false.
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
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.
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