$ ryokkkke.com/TypeScript/tsconfig.json

noFallthroughCasesInSwitch

概要

https://www.typescriptlang.org/tsconfig#noFallthroughCasesInSwitch

{
  "noFallthroughCasesInSwitch": true
}

fallthrough というのは switch 文の case 内で break が無い場合に、その下の case の処理も実行される仕様のことです。
JS では fallthrough が発生するので、break を書かないとどんどん下の case 文が実行されていきます。

これオプション名からわかりにくいんですが、fallthrough な case のうち、1 行以上処理が存在しているにも関わらず脱出処理(breakreturn)が無いものにエラーを吐きます。

とりあえずtrueにしておきましょう。

詳細

上で太字にした部分を説明します。

Ruby を書いていると case 文(JS で言う switch 文のこと)の中で when 句(JS で言う case のこと)に複数の値を指定できるのが結構便利だったりします。JS では case 文に複数の値を指定できないので、そういう時は switch 文の fallthrough を利用したくなります。

// "noFallthroughCasesInSwitch": true
const func = (hoge: string) => {
  switch (hoge) {
    case "HOGE":
    case "HOGE!!!":
    case "HOGE??":
    case "HOGE~~~~":
      return "This is HOGE!!!";
    case "piyo":
    case "PIYO":
    case "PIYO!!!":
      return "This is PIYO!!!";
  }
};

この書き方は JS 的にはなんら問題なく動きますし、"noFallthroughCasesInSwitch": trueであっても ts のコンパイルも通ります。
この例の場合、複数条件指定のつもりで書いている fallthrough な case には処理が 1 行もありません。
ので、上で太字にした「1 行以上処理が存在しているのに脱出処理が無い」という条件に当てはまりません。

逆に、下記のコードはコンパイルエラーです。

// "noFallthroughCasesInSwitch": true
const func = (hoge: string) => {
  let result;

  switch (hoge) {
    case "HOGE":
    case "HOGE!!!":
      console.log("HOGE!!"); // 1行以上の処理があるのにbreakもreturnも無いのでエラー
    case "HOGE??":
    case "HOGE~~~~":
      return "This is HOGE!!!";
    case "piyo":
    case "PIYO":
      result = "PIYO"; // 1行以上の処理があるのにbreakもreturnも無いのでエラー
    case "PIYO!!!":
      return "This is PIYO!!!";
  }

  return result;
};
index.ts:7:5 - error TS7029: Fallthrough case in switch.

7     case "HOGE!!!":
      ~~~~~~~~~~~~~~~

index.ts:13:5 - error TS7029: Fallthrough case in switch.

13     case "PIYO":
       ~~~~~~~~~~~~


Found 2 errors.

fallthrough は嫌いな人も多いわけですが、「複数の条件を指定したい場合」に限って言えば許されるようです。
個人的にも、fallthrough を複数条件指定以外で使う蓋然性が高いコードというのは見たことが無いので、このオプションは true で良いと思います。