🔥 Type Manipulation, Inferencia en Conditional Types
Los tipos condicionales nos proporcionan una forma de inferir los tipos con los que realizamos comparaciones, estos se obtienen en la parte verdadera utilizando la palabra infer
. Para los ejemplos anterior pudimos simplificar mas aun, utilizando infer
en lugar de obtener el tipo mediante un indexed type.
type Flatten<T> = T extends Array<infer I> ? I : T;
type T1 = Flatten<number[]>;
// type = number
type T2 = Flatten<number>;
// type = number
Esto también puede ser escrito mediante la sintaxis compacta de los arreglos [infer I]
;
type Flatten2<T> = T extends [infer I] ? I : T;
type T3 = Flatten2<string[]>
// type = string
type T4 = Flatten2<string>
// type = string
En ambos ejemplos hemos utilizado la palabra infer
para introducir un nuevo generic llamado I
. Esto nos simplifica la obtención del tipo que el arreglo almacena.
type ObtenerSalida<T> = T extends () => infer Return ? Return : never;
type T1 = ObtenerSalida<() => string>;
// type = string
type T2 = ObtenerSalida<() => () => number>;
// type () => number