Solución comentada
Publicado el 16 de septiembre de 2026La solución
type FromEntries<T extends [PropertyKey, unknown]> = { [K in T[0]]: Extract<T, [K, unknown]>[1] }El error más común
type FromEntries<T extends [PropertyKey, unknown]> = { [K in T[0]]: T[1] }Las claves están bien y todos los valores mal. Dentro del mapeo T sigue siendo la unión entera, así que T[1] son todos los valores a la vez: { a: 1 | 2; b: 1 | 2 }. Iterar sobre T[0] acota la *clave* que escribes, no la T de la que lees.
Línea por línea
Extract<T, [K, unknown]>Este es el paso de re-acotado. Para cada
Kextrae solo los pares cuyo primer elemento es esa clave, descartando el resto de la unión.FromEntries<['a', 1] | ['a', 2]>Dos pares comparten clave, así que la extracción conserva ambos y el valor de verdad es
1 | 2. Aquí la unión es correcta — la anterior también lo era, solo que pegada a las claves equivocadas.
Para recordar
Iterar sobre una unión no acota la unión en sí, solo la clave que produces. Si necesitas de vuelta el miembro correspondiente, Extract es como se pide.

