He entendido que algo así como:
type GenericExample<T> = T extends (infer U) ? U : 'bar';
es igual a:
type GenericExample<T> = T extends T ? T : 'bar';
Pero cuando las cosas se vuelven más elaboradas, TypeScript se queja:
type Types = 'text' | 'date' | 'articles' | 'params';
type MyExperiment<Type extends Types> = { t : Type };
type MyExperimentsUnion = Types extends (infer U) ? MyExperiment<U> : never;
// Type 'U' does not satisfy the constraint 'Types'.
// Type 'U' is not assignable to type '"params"'.
Entonces, me gustaría preguntar por qué esto está mal: en este caso particular, la distribución sobre la unión debería tener lugar, por lo que el U
tipo inferido debería ser text
, date
y así sucesivamente. Entonces, ¿qué significa T extends (infer U)
realmente y cuándo sería apropiado usarlo?
infer
palabra clave, pero hice esta extraña pregunta porque descubrí queT extends (infer U)
es válida en un tipo condicional, me sorprendió eso y comencé a investigar.