Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 247 · 30 de agosto de 2026 · Media

    Omitir por tipo

    Implementa OmitByType<T, U> para que descarte cada propiedad de T cuyo tipo de valor sea asignable a U, y conserve el resto exactamente como estaba.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    omit-by-type.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
    • OmitByType<{ a: string; b: number; c: string }, string>—
      → { b: number }
    • OmitByType<{ a: string }, string | number>—
      → {}
    • OmitByType<{ a: 1; b: 2 }, never>—
      → { a: 1; b: 2 }

    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 31 de agosto de 2026

    La solución

    type OmitByType<T, U> = { [K in keyof T as T[K] extends U ? never : K]: T[K] }

    El error más común

    type OmitByType<T, U> = { [K in keyof T]: T[K] extends U ? never : T[K] }

    Esto filtra el valor y deja la clave en pie. a sigue ahí, ahora con tipo never — una propiedad para la que nadie podrá aportar jamás un valor, que no es lo mismo que una propiedad inexistente. Filtrar del lado del valor puede vaciar una clave; no puede borrarla.

    Línea por línea

    1. as T[K] extends U ? never : K

      La cláusula as renombra la clave que se está produciendo. Renombrarla a never es la única forma de que un tipo mapeado no emita ninguna propiedad en esa iteración.

    2. OmitByType<{ a: 1; b: 2 }, never>

      Aquí no se descarta nada, porque 1 extends never es falso. never es el conjunto vacío: ningún tipo le es asignable, así que ninguna clave coincide y todo sobrevive.

    Para recordar

    Las claves se eliminan en la cláusula de clave, nunca en la de valor. Si acabas produciendo never como tipo de una propiedad, casi seguro querías no producir propiedad alguna.

    Usa