Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 257 · 9 de septiembre de 2026 · Media

    De tupla a objeto

    Implementa TupleToObject<T> para que una tupla de claves literales se convierta en un objeto que asocie cada una consigo misma.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    tuple-to-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
    • TupleToObject<['a', 'b']>—
      → { a: 'a'; b: 'b' }
    • TupleToObject<['x']>—
      → { x: 'x' }
    • TupleToObject<[]>—
      → {}

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

    La solución

    type TupleToObject<T extends readonly PropertyKey[]> = { [K in T[number]]: K }

    El error más común

    type TupleToObject<T extends readonly PropertyKey[]> = { [K in keyof T]: T[K] }

    Mapear sobre keyof T cuando T es una tupla te devuelve una *tupla*, no un objeto — el mapeo es homomórfico, así que conserva la condición de array junto con todo lo demás. ["a", "b"] se mapea a ["a", "b"], una respuesta perfectamente buena a una pregunta que nadie hizo.

    Línea por línea

    1. T[number]

      Indexar una tupla con number pregunta por «el tipo en cualquier índice», que es la unión de todo lo que contiene: "a" | "b". Esa unión es el conjunto de claves que de verdad quieres recorrer.

    2. { [K in T[number]]: K }

      Como el conjunto de claves se calcula en vez de ser keyof T, el mapeo deja de ser homomórfico — y por eso justamente el resultado vuelve como un objeto llano.

    Para recordar

    keyof T en una tupla significa sus índices; T[number] significa su contenido. Elegir el equivocado convierte un objeto en tupla, o al revés, y el mensaje de error casi nunca lo dice.

    Usa