Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 277 · 29 de septiembre de 2026 · Media

    ¿Es una unión?

    Implementa IsUnion<T> para que una unión de varios miembros sea true, un solo tipo sea false y never también sea false.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    is-union.ts
    Intento 1 de 3Aún sin comprobar

    Sustituye ??? — tu solución se comprueba con los casos de abajo. Tab indenta; pulsa Escape y luego Tab para sacar el foco.

    Comprobaciones

    3
    • IsUnion<string | number>—
      → true
    • IsUnion<string>—
      → false
    • IsUnion<never>—
      → false

    Cómo se juzga una comprobación Igualdad exacta de tipos, no asignabilidad — una intersección no es lo mismo que el objeto aplanado.

    Cómo le fue a todo el mundo

    Menos de 5 personas han resuelto este puzle hasta ahora. La distribución aparece cuando la muestra sea lo bastante grande como para significar algo.

    Juego corto

    Menos caracteres

    Aún no hay marcas públicas.

    Archivo
    02

    Solución comentada

    Publicado el 30 de septiembre de 2026

    La 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 : never

    Maneja 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

    1. [Whole] extends [T]

      Dentro de una rama distribuida T es un miembro y Whole conserva 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.

    Usa