こんにちは
連想配列で重複を省く処理をしたい時に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]) );
これでコンパイル出来るようになりました。







