在 TypeScript 中合并映射
How to merge Maps in TypeScript
在 TypeScript 中合并地图:
- 显式键入第三个 Map 的键和值。
- 使用展开语法 (…) 解包前两个 Map 的键值对。
- 键的类型和映射的值必须匹配。
索引.ts
const map1 = new Map([['country', 'Germany']]); const map2 = new Map([['salary', 100]]); const map3 = new Map<string, string | number>([...map1, ...map2]); // 👇️ {'country' => 'Germany', 'salary' => 100} console.log(map3);
我们使用
泛型
来键入第三个 Map 对象的键和值。
我们本可以对前两个映射执行相同的操作,但没有必要这样做,因为 TypeScript 能够根据传入的值推断类型。
下面的代码片段实现了相同的结果。
索引.ts
const map1 = new Map<string, string>([['country', 'Germany']]); const map2 = new Map<string, number>([['salary', 100]]); const map3 = new Map<string, string | number>([...map1, ...map2]); // 👇️ {'country' => 'Germany', 'salary' => 100} console.log(map3);
第一个 Map 具有字符串类型的键和字符串类型的值。
第二个 Map 具有字符串类型的键和数字类型的值。
合并Map时,我们必须确保第三个Map的类型与其他两个的类型一致。
该示例显示了我们如何必须使用
联合类型
将第三个映射的值设置为字符串或数字。
我们使用
扩展运算符 (…)
将 2 个对象的键值对解包Map
到一个数组中。
索引.ts
const map1 = new Map<string, string>([['country', 'Germany']]); // 👇️ [ ['country', 'Germany'] ] console.log([...map1]);
该数组包含由键值对组成的嵌套数组。
最后一步是将数组传递给
Map()
构造函数,该构造函数采用可迭代对象作为参数。
有了这些值,示例如下所示:
索引.ts
const map3 = new Map<string, string | number>([ ['country', 'Germany'], ['salary', 100], ]);
可迭代对象Map
必须由键值对组成,例如二维数组或另一个Map
对象。
Map
只要最终 Map 的类型与其他 Map 的类型一致,就可以根据需要对尽可能多的对象重复此过程。
索引.ts
const map1 = new Map<string, string>([['country', 'Germany']]); const map2 = new Map<string, number>([['salary', 100]]); const map3 = new Map<string, boolean>([['isProgrammer', true]]); const map4 = new Map<string, string | number | boolean>([ ...map1, ...map2, ...map3, ]);
第四个 Map 中的值类型必须与所有其他 Map 中的值类型兼容。
请注意,键的插入顺序被保留。如果您需要重新排序键值对,只需切换使用展开运算符 (…) 的顺序即可。