JavaだとMapのvalueを取得する際に、取得できなかった場合のデフォルト値を返すgetOrElse
メソッドが用意されていますが、JavaScriptにはありません。今回の記事では、その同等の挙動を簡潔に書けるようにします。
環境
- TypeScript
- 4.7.4
- CodeSandboxで検証
対応
Null合体演算子(??)を組み合わせれば、getOrElse
と同等の挙動させられます。
// Mapの定義 const actionMap: Map<String, number> = new Map<String, number>([ ["a", 1], ["b", 2], ["c", 3] ]); // 取得できなければ0を返却する const result: number = actionMap.get("a") ?? 0;
getOrThrow
getOrElse
はデフォルト値を返すためのメソッドです。似たメソッドに、データが取得できなかった場合にエラーを返すgetOrThrow
があります。
同様にgetOrThrow
も実行できないか確認していましたが、次のエラーメッセージが出力されて、簡潔に実装することは難しそうです。
Support for the experimental syntax 'throwExpressions' isn't currently enabled
素直にifで処理分岐するしかなさそうです。
function getValue3(actionMap: Map<String, number>, key: String): number { const result: number | undefined = actionMap.get(key); if (result == null) { throw new Error("Error"); } return result; }
ソースコード
終わりに
TypeScriptだと型定義が必要ですので、分かる範囲では1行にまとめてしまいたいですね。
型定義は非必須ですが、警告が出ているままコーディングしていると本当に大事な警告を見逃してしまいますので、できる範囲ではキッチリ作業していきたいです。
参考情報
- Map<K, V> | TypeScript入門『サバイバルTypeScript』
- Null 合体演算子 (??) - JavaScript | MDN
- suinさんありがとうございました。
twitter.comFF外から失礼します。
— suin・読者3万人『サバイバルTypeScript』公開中! (@suin) 2022年7月10日
getOrElseのようなメソッドはありませんが、Null合体演算子(??)を使うと、似たようなことができます😌
Null合体演算子↓https://t.co/H6i1iujm38
余計なリプでしたら申し訳ございません🙇🏻♂️ pic.twitter.com/6CqINjlhX0