TypeScript(NodeJS)

【TypeScript】switch文でcaseに複数条件を指定する

どの言語にも存在する switch-case 文。

引数に 1 つの変数を取るものが多いので、文字列連結させて無理やり条件を作っちゃうってこともありますよね。

逃げの手というか・・・。

中には Kotlin の when ように、条件設定が柔軟にできるものもあります。

【Kotlin入門】ifとwhenによる条件判定を使い分ける「Kotlinで範囲を表すRange変数の使いどころを探る」で紹介したサンプルプログラムで、if による条件判定を少し紹介しました。 ...

今回は、TypeScript で 2 つの条件で switch 文が使えないか調べてみたので紹介します。

TypeScriptに入門してみる

ここ数年、人気爆発中の TypeScript。

サーバーサイドで NodeJS、フロントエンドで JavaScript みたいなプロジェクトなら乗り換えたくなりますよね。

しかしサーバサイドで別のプログラム言語を使っていたら、わざわざ JS の世界に飛び込まなくても・・・。

って思っていたのですが、慣れてくると少しずつ楽しくなってきました。

とりあえず入門編として「サバイバルTypeScript」を紹介しておきます。

大型書店で TypeScript の入門書を探したのですが、なかなか良さそうな本が見つからなかったのですよね。

オライリー本はいまだに苦手で・・・。

あとは Web 上で TypeScript の実行確認ができるサイト。

switchで複数条件

さて、本題に戻ります。

switch 文のドキュメントやリファレンスを見ても引数は 1 つだけのようです。

if を使うなり、別の方法を検討しなければいけないかと思ったのですが、case に関数が使えるようです。

booleanが戻り値の関数

上記サイトを参考に、地域(エリア)とステージ(本番、テスト)の環境別にドメインを割り出す条件式を定義してみました。

上記の実行結果は以下の通り。

[LOG]: “domain: jp-test.example.com”

match という関数を定義し、env の中身と area, stage が一致すれば true を返します。

switch の引数を true にしておけば、関数の戻り値が true の時にマッチという感じです。

numberが戻り値の関数

もちろん、関数の戻り値が number 型であれば、switch の引数も number 型の変数や数値を指定すれば OK。

上記の実行結果は以下の通り。

[LOG]: “match.”
[LOG]: “not match.”

まとめ

TypeScript の switch 文で複数の条件を判定に使う方法を紹介してきました。

今回の実装がベストかどうかはわかりませんが、柔軟な対応ができそうで悪くありません。

また、JavaScript っぽい実装なのかなっとも思います。

まだまだ慣れない部分も多い TypeScript なので、ノウハウを蓄積していきたいところです。