Mi pregunta es algo similar a esto.
Tengo un mapa con la clave como objectType1 y el valor como objectType1 | nulo.
type ObjectType1 = { key:string , value:string } const newMap = new Map<ObjectType1, Array<ObjectType1>|null>([ [{key:'key1', value:'value1'},null], ]);lo que quiero hacer aquí es que quiero un nuevo objeto que se parezca a:
const newObject = { key1 : {key: 'key1', value:'value1'} }Entonces, básicamente, el nuevo objeto debería poder hacer referencia al objeto. Si hago newObject.key1, debería poder obtener el objeto {key: 'key1', value:'value1'}
¿Cómo hago esto?
Hay varias formas de iterar sobre las claves del Map y recopilarlas en un objeto. Aquí hay uno:
const newObject = Array.from(newMap.keys()). reduce<Record<string, ObjectType1 | undefined>>( (acc, k) => ({ ...acc, [k.key]: k }), {} ); // const newObject: Record<string, ObjectType1 | undefined> Aquí estamos usando el método keys() de Map para obtener un iterador iterable de todos los objetos clave. Esto no es una matriz, y dado que vamos a usar el método reduce() de Array para procesarlo, primero debemos convertirlo en una matriz a través del método Array.from() .
Entonces Array.from(newMap.keys()) ahora es una matriz de claves, y usamos reduce() para recopilarlas en un objeto. Hacemos esto comenzando con el objeto vacío {} y, para cada elemento k en la matriz de claves, distribuimos el objeto anterior en un nuevo objeto y agregamos una nueva propiedad con key k.key y value k .
Tenga en cuenta que el tipo de newObject es Record<string, ObjectType1 | undefined> , utilizando el tipo de utilidad Record<K, V> . Tiene una firma de índice de cadena; eso significa que el compilador de TypeScript no tiene idea de cuáles serán realmente las claves de newObject . Solo que, para cada clave en newObject , el valor de la propiedad será del tipo ObjectType1 | undefined (Esa posibilidad undefined está ahí, de modo que si escribe newObject.someKeyThatDoesNotActuallyExist el compilador no afirmará falsamente que hay una propiedad allí de tipo ObjectType1 . Tiene que manejar posibles propiedades undefined /faltantes).
Bien, vamos a probarlo:
console.log(newObject.key1) // { "key": "key1", "value": "value1" }¡Se ve bien!