Solución comentada
Publicado el 8 de agosto de 2026La solución
type Permutation<T, K = T> = [T] extends [never] ? [] : K extends K ? [K, ...Permutation<Exclude<T, K>>] : never
El error más común
type Permutation<T> = T extends T ? [T] : neverEsto distribuye y envuelve cada miembro en su propia tupla, dando ["a"] | ["b"] — cada miembro solo, nunca combinado. Además responde never para never, porque distribuir sobre la unión vacía no produce nada en vez de la tupla vacía.
Línea por línea
[T] extends [never]El envoltorio de tupla suprime la distribución, algo esencial aquí: un condicional distributivo sobre
neverproducenevery nunca se alcanzaría el caso base.K extends KUn condicional trivialmente cierto, usado solo por su efecto secundario: distribuye
Kpara que la rama de abajo se ejecute una vez por miembro.Ktoma por defectoT, guardando una copia intacta mientrasExcludeestrechaT.
Para recordar
K extends K es el modismo para «distribuye esta unión» y [T] extends [never] para «no lo hagas». Conocer ambos, y cuál necesita cada línea, es casi toda la diferencia entre código a nivel de tipos que funciona y código que devuelve never en silencio.

