Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 249 · 1 de septiembre de 2026 · Media

    Opcionales, pero solo estas

    Implementa PartialBy<T, K> para que solo las propiedades nombradas en K se vuelvan opcionales. El resultado debe ser un único tipo de objeto plano, no una intersección. Flatten viene dado.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    partial-by-keys.ts
    type Flatten<T> = { [K in keyof T]: T[K] }
    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
    • PartialBy<{ a: string; b: number }, 'b'>—
      → { a: string; b?: number }
    • PartialBy<{ a: string; b: number }, 'a' | 'b'>—
      → { a?: string; b?: number }
    • PartialBy<{ a: string }, never>—
      → { 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 2 de septiembre de 2026

    La solución

    type PartialBy<T, K extends keyof T> = Flatten<Omit<T, K> & Partial<Pick<T, K>>>

    El error más común

    type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>

    Todo aquí es correcto salvo la forma. { a: string } & { b?: number } acepta y rechaza exactamente los mismos valores que { a: string; b?: number }, pero no es el mismo *tipo*, y Equal compara tipos, no comportamiento. Una intersección son dos objetos uno al lado del otro; la comprobación pide uno solo.

    Línea por línea

    1. Omit<T, K> & Partial<Pick<T, K>>

      Divide el objeto en dos: las claves que se quedan como están y las que pasan a ser opcionales. Cada mitad por separado es fácil.

    2. Flatten<...>

      Un mapeo homomórfico sobre la intersección recorre cada clave una vez y reconstruye un único objeto — y por ser homomórfico, el ? sobrevive al viaje.

    Para recordar

    Las intersecciones sirven para ensamblar un tipo de objeto; un mapeo homomórfico sirve para rematarlo. Ensamblar sin rematar es la razón más común de que una solución con buen aspecto no pase estas comprobaciones.

    Usa