Cuando los tipos condicionales actúan sobre generics se convierten en distributives (distributivos) si se les proporciona una union. Por ejemplo tomemos el siguiente ejemplo.
type ConvertirEnArreglo<T> = T extends any ? T[] : never;
type T1 = ConvertirEnArreglo<string | number>;
// type = string[] | number[]
Por lo general el efecto distributivo es el esperado, sin embargo si se desea prevenir este comportamiento podemos encerrar cada elemento a ambos lados de la expresión extends
.
type ConvertirEnArreglo2<T> = [T] extends [any] ? T[] : never;
type T2 = ConvertirEnArreglo2<string | number>;
// type = (string | number)[]