TypeScript(JavaScript)のswitch文で「Unexpected lexical declaration in case block」

372
NO IMAGE

先日、以下のようなコード書いたところ、ESLintに「Unexpected lexical declaration in case block」と怒られました。

let input = 1

switch (input) {
  case 1:
    const message = '指定されたのは1です。'
    console.log(message)
    break;
  case 2:
    console.log('指定されたのは2です。')
    break;
  default:
    console.log('不明な数値が指定されました。')
    break;
}

元々は下記のようなコードだったのですが、メッセージを定数messageに切り出したところ、エラーとなるようになってしまいました。

let input = 1

switch (input) {
  case 1:
    console.log('指定されたのは1です。')
    break;
  case 2:
    console.log('指定されたのは2です。')
    break;
  default:
    console.log('不明な数値が指定されました。')
    break;
}

調べてみたところ、case内で定数(const)、変数(let)、関数(function)、クラス(class)を定義する場合は、caseの中身を中括弧({})で囲まないといけないそうです(参考:no-case-declarations)。

今回の場合だと、下記のようにすればエラーにならなくなります。

let input = 1

switch (input) {
  case 1: {
    const message = '指定されたのは1です。'
    console.log(message)
    break;
  }
  case 2:
    console.log('指定されたのは2です。')
    break;
  default:
    console.log('不明な数値が指定されました。')
    break;
}