如何在TypeScript中合并两个Maps

时间:2017-10-31 12:55:05

标签: typescript

我正在尝试合并2个地图。在ES6中我会这样做,它完全正常:

const m1 = new Map();
m1.set('foo', 1);

const m2 = new Map();
m2.set('bar', 3);

const m3 = new Map([...m1, ...m2]);

如果我在TS中执行相同操作,则会出现以下错误:

Type 'Map<string, number>' is not an array type.

我认为我必须以某种方式将其转换为数组,但我找不到有效的解决方案。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:7)

这也适用于目标ES5:

let map1:Map<string, number> = new Map([["a", 1], ["b", 2]]);
let map2:Map<string, number> = new Map([["c", 1], ["d", 2]]);

let mergedMap:Map<string, number> = new Map([...Array.from(map1.entries()), ...Array.from(map2.entries())]);

答案 1 :(得分:5)

如果您针对Typescript编译定位es5,则会出现此错误。如果可以的话,你应该将es2015作为Typescript编译的目标,然后不会出现错误(例如在tsconfig.json中):

{
    "compilerOptions": {
        "target": "es2015"
    }
}

展开运算符仅适用于地图,在ES6模式下设置。 https://github.com/Microsoft/TypeScript/issues/8856#issuecomment-222879485那是因为它忽略了扩展运算符并且按原样输出。另一种说法是,TypeScript不会传播Map / Set的传播。

答案 2 :(得分:0)

这是一个简短的语法:

const map1 = new Map([["a", 1], ["b", 2]])
const map2 = new Map([["c", 1], ["d", 2]])

const mergedMaps = new Map([...map1.entries(), ...map2.entries()])