Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 235 · 18 de agosto de 2026 · Media

    EligePorTipo

    Implementa PickByType<T, U> para que conserve solo las propiedades cuyo tipo de valor sea asignable a U. Las claves rechazadas deben desaparecer del todo, no quedar como never.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    pick-by-type.ts
    interface Mixed {
      id: number
      name: string
      active: boolean
      score: number
    }
    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
    • PickByType<Mixed, number>—
      → { id: number; score: number }
    • PickByType<Mixed, string>—
      → { name: string }
    • PickByType<Mixed, symbol>—
      → {}
    • PickByType<{ a: string }, string>—
      → { a: string }

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

    La solución

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

    El error más común

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

    El filtrado ocurre del lado del valor, así que todas las claves sobreviven — las rechazadas solo contienen never. PickByType<Mixed, number> queda como { id: number; name: never; active: never; score: number }, un tipo muy distinto del pedido y prácticamente inservible.

    Línea por línea

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

      La cláusula as reescribe cada clave mientras se ejecuta el mapeo. Aquí la reescritura es condicional: conserva la clave cuando el valor encaja, o renómbrala a never cuando no.

    2. never

      Una clave de tipo never no puede existir, así que TypeScript omite la propiedad en vez de crear una imposible. Esa regla silenciosa es lo que convierte el renombrado de claves en un filtro.

    Para recordar

    Filtrar un tipo objeto ocurre en la cláusula de clave, nunca en el valor. as ... : never es la única forma de hacer que una propiedad desaparezca de verdad.

    Usa