13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

先日、以下のようなコード書いたところ、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;
}
13
3
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
13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?