0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

noFallthroughCasesInSwitchを指定してfallthroughを検出する

Posted at

はじめに

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 1break がないため、意図しないfallthroughがあると判定される。

おわりに

noFallthroughCasesInSwitchを有効にすることで、
switch文での意図しないfallthroughを静的解析で防ぐことができる。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?