Solución comentada
Publicado el 30 de septiembre de 2026La solución
type IsUnion<T, Whole = T> = [T] extends [never] ? false : T extends Whole ? [Whole] extends [T] ? false : true : never
El error más común
type IsUnion<T, Whole = T> = T extends Whole ? [Whole] extends [T] ? false : true : neverManeja tipos normales y uniones, pero un condicional desnudo sobre never se ejecuta cero veces y devuelve never. Solo la guarda envuelta puede llamarlo false.
Línea por línea
[Whole] extends [T]Dentro de una rama distribuida
Tes un miembro yWholeconserva la unión original. La comparación envuelta detecta la diferencia sin volver a distribuir.
Para recordar
Detectar una unión consiste en comparar un miembro distribuido con el conjunto conservado; never necesita una guarda propia porque no produce miembros.

