noFallthroughCasesInSwitch
リリースされたバージョン: 1.8
fallthroughとはswitchでにおける case 文でbreakまたはreturnを行わないことを意味します。 case 文が空でない場合に限り break や return が行われているかを厳密に評価します。
typescriptfunction daysOfMonth(month: number): number {let days: number = 31;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:break;case 2:days = 28;case 4:case 6:case 9:case 11:days = 30;default:throw new Error("INVALID INPUT");}return days;}
typescriptfunction daysOfMonth(month: number): number {let days: number = 31;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:break;case 2:days = 28;case 4:case 6:case 9:case 11:days = 30;default:throw new Error("INVALID INPUT");}return days;}
ある月の日数を求める関数 daysOfMonth() を定義しましたがこの関数には fallthrough が存在します。このオプションを有効にすると次のようなエラーが発生します。
typescripterror TS7029: Fallthrough case in switch.case 2:~~~~~~~error TS7029: Fallthrough case in switch.case 11:~~~~~~~~
typescripterror TS7029: Fallthrough case in switch.case 2:~~~~~~~error TS7029: Fallthrough case in switch.case 11:~~~~~~~~
case 1, case 3, case 5, .... が fallthrough とみなされないのは case 文の実行部分が break だけで何もしないからです。
これを回避するためにはcaseでは漏れなくbreakあるいはreturnをするように設計します。
typescriptffunction daysOfMonth(month: number): number {let days: number = 31;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:break;case 2:days = 28;break;case 4:case 6:case 9:case 11:days = 30;break;default:throw new Error('INVALID INPUT');}return days;}
typescriptffunction daysOfMonth(month: number): number {let days: number = 31;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:break;case 2:days = 28;break;case 4:case 6:case 9:case 11:days = 30;break;default:throw new Error('INVALID INPUT');}return days;}