Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 256 · 8 de septiembre de 2026 · Media

    Invertir

    Implementa Invert<T> para que los valores de T pasen a ser las claves y las claves los valores.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    invert-object.ts
    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
    • Invert<{ a: 'x'; b: 'y' }>—
      → { x: 'a'; y: 'b' }
    • Invert<{ a: 'x' }>—
      → { x: 'a' }
    • Invert<{}>—
      → {}

    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 9 de septiembre de 2026

    La solución

    type Invert<T extends Record<string, string>> = { [K in keyof T as T[K]]: K }

    El error más común

    type Invert<T extends Record<string, string>> = { [K in keyof T as T[K]]: T[K] }

    La mitad del intercambio. La clave se renombra al valor antiguo, lo cual es correcto, y luego el valor se fija también al valor antiguo — produciendo { x: "x" } donde la comprobación quiere { x: "a" }. Renombrar una clave no mueve la clave antigua a ninguna parte; si la quieres, tienes que ponerla tú en la cláusula de valor.

    Línea por línea

    1. as T[K]

      La nueva clave es el valor antiguo. as acepta cualquier expresión que produzca un tipo de clave, y un acceso indexado lo es.

    2. : K

      Y el nuevo valor es la clave antigua, todavía en el ámbito, todavía un literal. Las dos cláusulas son independientes — y eso es lo que permite un intercambio limpio en una línea.

    Para recordar

    Un tipo mapeado toma dos decisiones separadas por clave: cómo se llama y qué contiene. La mayoría de los errores en tipos mapeados son una de esas dos respuestas reutilizada por accidente en el lugar de la otra.

    Usa