Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 220 · 28 de julio de 2026 · Media

    Reconstruye Exclude

    Implementa MyExclude<T, U> para que elimine de la unión T todo miembro asignable a U. Es una línea — lo sutil es por qué funciona.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    rebuild-exclude.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

    4
    • MyExclude<'a' | 'b' | 'c', 'a'>—
      → 'b' | 'c'
    • MyExclude<string | number, number>—
      → string
    • MyExclude<'a', 'a'>—
      → never
    • MyExclude<'a' | 'b', 'c'>—
      → 'a' | 'b'

    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 29 de julio de 2026

    La solución

    type MyExclude<T, U> = T extends U ? never : T

    El error más común

    type MyExclude<T, U> = [T] extends [U] ? never : T

    Envolver T en una tupla desactiva la distribución, así que se compara la unión entera de golpe. ["a" | "b" | "c"] extends ["a"] es falso, y la unión vuelve entera sin filtrar.

    Línea por línea

    1. T extends U

      T está aquí *desnudo* — aparece solo en el lado comprobado, sin envolver en tupla, array u objeto. Esa es exactamente la condición que dispara la distribución sobre una unión.

    2. ? never : T

      Cada miembro se convierte en never o sobrevive tal cual. Al unir los resultados los never desaparecen solos, porque never es el elemento neutro de la unión.

    Para recordar

    La distribución es la diferencia entre preguntar sobre una unión y preguntar sobre cada miembro. [T] extends [U] es el interruptor que la apaga.

    Usa