こんにちは
連想配列で重複を省く処理をしたい時にMapを使用することがあります。
例でuserCodeが同じであれば重複とみなして排除したいと思います。
const arr = [ { id: 1, name: '太郎', userCode: 1, }, { id: 2, name: '花子', userCode: 2, }, { id: 3, name: '太郎', userCode: 1, } ] const map = new Map( arr.map(a => [a.userCode, a]) ); const items = Array.from(map.values()); console.log(items); // 出力結果 // [ // { id: 3, name: '太郎', userCode: 1 }, // { id: 2, name: '花子', userCode: 2 } // ]
これで重複排除は出来るのですがコンパイルエラーになります。
これはTypescriptの型推論がうまく動作しないで起きる現象です。
githubにもissueとして上がっています。
ES6 Map array constructor needs extra hints
解決作としてはユーザーが型をつけてあげれば解消できます。
const map = new Map( arr.map(a => [a.userCode, a]) ); ↓ const map = new Map( arr.map<[number, User]>(a => [a.userCode, a]) );
これでコンパイル出来るようになりました。