Eu entendi que algo como:
type GenericExample<T> = T extends (infer U) ? U : 'bar';
é igual a:
type GenericExample<T> = T extends T ? T : 'bar';
Mas quando as coisas se tornam mais elaboradas, o TypeScript reclama:
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"'.
Então, eu gostaria de perguntar por que isso está errado: nesse caso específico, a distribuição por união deve ocorrer, portanto o U
tipo inferido deve ser text
, então date
e assim por diante. Então, o que T extends (infer U)
realmente significa e quando seria apropriado usá-lo?
infer
palavra - chave, mas fiz essa pergunta estranha porque descobri queT extends (infer U)
é válida em um tipo condicional. Fiquei surpreso com isso e comecei a investigar.