Saltar al contenido
webtype.orgwebtype.org#219 rebuild-partial · par 2

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 219 · 27 de julio de 2026 · Suave

    Reconstruye Partial

    Implementa `MyPartial<T>` para que cada propiedad sea opcional. Permitir `undefined` en el valor no es lo mismo — la clave misma debe volverse opcional.

    01

    Intenta el puzle tú mismo

    Par 2

    Puzle

    rebuild-partial.ts
    interface User {
      id: number
      name: string
    }
    Intento 1 de 2Aú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
    • MyPartial<User>
      { id?: number; name?: string }
    • MyPartial<{ a: string }>
      { a?: string }
    • MyPartial<{}>
      {}

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

    La solución

    type MyPartial<T> = { [K in keyof T]?: T[K] }

    El error más común

    type MyPartial<T> = { [K in keyof T]: T[K] | undefined }

    Esto ensancha el tipo del valor pero deja la clave obligatoria: sigues teniendo que escribir `{ id: undefined }` en vez de omitirla. Opcionalidad y «puede ser undefined» son propiedades realmente distintas, y las comprobaciones de igualdad exacta las distinguen.

    Línea por línea

    1. { [K in keyof T]?: T[K] }

      El `?` es un modificador de tipo mapeado. Va entre la cláusula de clave y los dos puntos, y añade opcionalidad a cada clave que produce el mapeo.

    2. keyof T

      Mapear sobre `keyof T` en lugar de un conjunto de claves dado es lo que hace que esto afecte a todo el objeto. Compáralo con `Pick`, donde el conjunto es un argumento.

    Para recordar

    Los modificadores (`?` y `readonly`) se aplican al mapeo, no al valor. `-?` y `-readonly` los quitan, que es como se escribe `Required`.

    Usa