Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 226 · 3 de agosto de 2026 · Suave

    Reconstruye Readonly

    Implementa MyReadonly<T> para que cada propiedad sea readonly. Solo un nivel — los objetos anidados se dejan tal cual.

    01

    Intenta el puzle tú mismo

    Par 2

    Puzle

    rebuild-readonly.ts
    interface Config {
      host: string
      port: number
    }
    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
    • MyReadonly<Config>—
      → { readonly host: string; readonly port: number }
    • MyReadonly<{ a: string }>—
      → { readonly a: string }
    • MyReadonly<{}>—
      → {}

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

    La solución

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

    El error más común

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

    Esto aplica Readonly a cada *valor* en lugar de al mapeo. Para un primitivo como string no hace nada, así que las claves siguen siendo mutables y el resultado es una copia de T.

    Línea por línea

    1. readonly [K in keyof T]

      El modificador precede a la cláusula de clave, igual que escribirías readonly host: string en una interfaz. Marca la propiedad, no el tipo de su valor.

    2. T[K]

      El valor pasa intacto, que es lo que lo mantiene superficial. Recurrir aquí es exactamente cómo se construye DeepReadonly.

    Para recordar

    Los modificadores actúan sobre propiedades; envolver el tipo del valor es otra operación distinta. Confundirlas produce un tipo que parece correcto y no impone nada.

    Usa