Solución comentada
Publicado el 10 de septiembre de 2026La 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
T[number]Indexar una tupla con
numberpregunta 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.{ [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.

