我想合并2个地图.在ES6中,我会这样做,它完全正常:
const m1 = new Map();
m1.set('foo', 1);
const m2 = new Map();
m2.set('bar', 3);
const m3 = new Map([...m1, ...m2]);
Run Code Online (Sandbox Code Playgroud)
如果我在TS中执行相同操作,则会出现以下错误:
Type 'Map<string, number>' is not an array type.
Run Code Online (Sandbox Code Playgroud)
我假设我必须以某种方式将它投射到数组,但我没有找到一个有效的解决方案.我该如何解决这个问题呢?
这也适用于目标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())]);
Run Code Online (Sandbox Code Playgroud)
这是一个简短的语法:
const map1 = new Map([["a", 1], ["b", 2]])
const map2 = new Map([["c", 1], ["d", 2]])
const mergedMaps = new Map([...map1.entries(), ...map2.entries()])
Run Code Online (Sandbox Code Playgroud)
如果将es5作为Typescript编译的目标,则会出现此错误。如果可以,则应将es2015作为Typescript编译的目标,然后该错误将不会出现(例如,在tsconfig.json中):
{
"compilerOptions": {
"target": "es2015"
}
}
Run Code Online (Sandbox Code Playgroud)
散布运算符仅适用于ES6模式下的“地图集”。https://github.com/Microsoft/TypeScript/issues/8856#issuecomment-222879485这是因为它忽略了传播运算符,并且按原样输出。换句话说,TypeScript不会为Map / Set传递价差。
| 归档时间: |
|
| 查看次数: |
5560 次 |
| 最近记录: |