Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 241 · 24 de agosto de 2026 · Suave

    Reconstruye Required

    Implementa MyRequired<T> para que toda propiedad opcional pase a ser obligatoria. Es el inverso exacto del puzle n.º 219.

    01

    Intenta el puzle tú mismo

    Par 2

    Puzle

    rebuild-required.ts
    interface Draft {
      title?: string
      body?: 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
    • MyRequired<Draft>—
      → { title: string; body: string }
    • MyRequired<{ a?: number }>—
      → { a: number }
    • MyRequired<{ a: 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 25 de agosto de 2026

    La solución

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

    El error más común

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

    Este es el mapeo identidad, y ahí está la sorpresa: un tipo mapeado sobre keyof T es *homomórfico*, así que copia los modificadores ? y readonly existentes en vez de descartarlos. Las propiedades opcionales siguen siendo opcionales y el tipo no cambia.

    Línea por línea

    1. -?

      El menos resta el modificador. Hace dos cosas a la vez: la clave deja de ser opcional y se elimina undefined del tipo del valor — por eso title?: string queda como title: string y no title: string | undefined.

    2. { [K in keyof T]

      Mapear directamente sobre keyof T es lo que lo hace homomórfico, y lo homomórfico es lo que permite heredar modificadores. Mapea sobre un conjunto de claves calculado y todos los modificadores se pierden por defecto.

    Para recordar

    + y - antes de ? o readonly son la única forma de cambiar los modificadores de una propiedad. Sin ellos, un tipo mapeado conserva en silencio lo que ya había, lo que hace de «no pasó nada» un fallo muy común.

    Usa