はじめに
switch文に break
を書き忘れると、意図しないフォールスルーが発生する。
TypeScriptでは、noFallthroughCasesInSwitchオプションを有効にすることで、
静的解析の段階でこのミスを検知できる。
本記事では、このオプションの有無による挙動の違いを解説する。
noFallthroughCasesInSwitch
noFallthroughCasesInSwitchはswitch文のfallthroughを禁止するコンパイラオプションです。
fallthroughとは何か
switch文で case
の末尾に break
を書かない場合、処理はそのまま次の case
に流れる。
この挙動をfallthrough(フォールスルー)と呼ぶ。
noFallthroughCasesInSwitchが無効
tsconfig.jsonのnoFallthroughCasesInSwitchを指定していない場合、
fallthroughは検知されない。
const value = 1;
switch (value) {
case 1:
console.log("one");
case 2:
console.log("two");
}
このコードを実行すると、次のように出力される:
one
two
break
がないため、case 2
まで実行されてしまう。
noFallthroughCasesInSwitchが有効
tsconfig.jsonに noFallthroughCasesInSwitch: true
を指定する:
{
"compilerOptions": {
"noFallthroughCasesInSwitch": true
}
}
以下のコードは静的解析でエラーとなる:
const value = 1;
switch (value) {
case 1:
console.log("one");
case 2:
console.log("two");
break;
}
出力されるエラー:
error TS7029: Fallthrough case in switch.
case 1
に break
がないため、意図しないfallthroughがあると判定される。
おわりに
noFallthroughCasesInSwitchを有効にすることで、
switch文での意図しないfallthroughを静的解析で防ぐことができる。