技術

TypescriptでMap使用時にコンパイルエラー

投稿日:

こんにちは

連想配列で重複を省く処理をしたい時に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])
);

これでコンパイル出来るようになりました。

参考資料
MDN Map
【JavaScript】Arrayの重複を排除する最もシンプルな方法

-技術

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

どの端末で見ても、要素を上下左右の中央に配置する!

こんにちは。たなかです。 最近はスマホで表示するWebアプリの開発をさせてもらっ …

docomo雑談対話APIを使って会話BOTを作りました。(LINE BOT + Heroku + Rails + docomo雑談API)

こんばんは 前回、LINE BOTを無料で試してみました。heroku + Ra …

Ionicアプリのアイコンやスプラッシュ画像を変更したい!

こんにちは。田中です。 現在Ionicを使ったアプリ開発に携わっているのですが、 …

[Slack] スラッシュコマンドでamazon検索

Slackネタです。 amazonがSlackの買収を検討しているとかいないとか …

no image

【Angular】component.htmlをprettierで整形する

こんにちは 今回はcomponent.htmlをprettierで整形する方法を …