2017-10-31 22 views
1

2つのマップをマージしようとしています。 ES6で、私はそうのようにそれを行うだろうし、それは完全に正常に動作します:TypeScriptで2つのマップをマージする方法

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. 

私はそれをキャストする必要があることを前提とどういうわけか配列していましたが、実際の解決策が見つかりませんでした。この問題の修正方法はどうすればよいですか?

+1

広がりオペレータはES6モードでMap's、 '' Set'sのために動作します。 https://github.com/Microsoft/TypeScript/issues/8856#issuecomment-222879485を参照してください。 –

答えて

3

Typescriptコンパイルでes5を指定すると、このエラーが発生します。あなたは活字体のコンパイルのためのes2015をターゲットとすべきことができますし、エラーが(例えばtsconfig.jsonに)表示されない場合:

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

広がりオペレータのみがマップのために働く、ES6モードに設定します。 https://github.com/Microsoft/TypeScript/issues/8856#issuecomment-222879485これは、スプレッド演算子を無視してそのまま出力されるためです。これを言うもう一つの方法として、TypeScriptはMap/Setのスプレッドをトランジリエートしません。

0

これは、ターゲット・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())]); 
関連する問題