有多种方法可以迭代Map
的键并将它们收集到一个对象中。这是一个:
const newObject =
Array.from(newMap.keys()).
reduce<Record<string, ObjectType1 | undefined>>(
(acc, k) => ({ ...acc, [k.key]: k }), {}
);
// const newObject: Record<string, ObjectType1 | undefined>
这里我们使用的是the keys()的方法Map获取所有关键对象的可迭代迭代器。这不是一个数组,因为我们要使用the reduce()的方法Array要处理它,我们首先需要通过以下方式将其转换为数组the Array.from() method.
So Array.from(newMap.keys())
现在是一个键数组,我们使用reduce()
将它们整理成一个对象。我们从空对象开始来做到这一点{}
, 和, 对于每个元素k
在键数组中,我们spread将先前的对象放入新对象中,并使用 key 添加新属性k.key
和价值k
.
请注意,类型newObject
is Record<string, ObjectType1 | undefined>
, using the Record<K, V>实用型。它有一个字符串索引签名;这意味着 TypeScript 编译器不知道什么键newObject
实际上会的。仅此而已,对于每个键newObject
, 财产value将是类型ObjectType1 | undefined
。 (那undefined
可能性就在那里,所以如果你写newObject.someKeyThatDoesNotActuallyExist
编译器不会错误地声称存在类型的属性ObjectType1
。你必须处理可能的情况undefined
/缺少属性)。
好吧,我们来测试一下:
console.log(newObject.key1)
// { "key": "key1", "value": "value1" }
看起来不错!
Playground 代码链接