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