【eslint】Fehler: Unerwartete lexikalische Deklaration im Case-Block

Während der Migration des Projektcodes aufgetreten, zum Beispiel:

const getPersonInfo = (type: number) => {
  switch (type) {
    case 1:
      const name = '张三'; // Error: Unexpected lexical declaration in case block.eslint
      break;
    case 2:
      const name = '李四';
      console.log(name); // Uncaught SyntaxError: Identifier 'name' has already been declared
      break;
    default:
      break;
  }
};

getPersonInfo(2);

Es ist ersichtlich, dass sich die in Fall 1 und Fall 2 definierten Felder theoretisch nicht gegenseitig beeinflussen sollten, aber aufgrund der Förderung des Umfangs wird Fall 1 Fall 2 beeinflussen.

Offizielle Dokumente erklären, dass es falsch ist, let, const, function und class direkt unter case oder default zu verwenden, und dass geschweifte Klammern verwendet werden müssen.


const getPersonInfo = (type: number) => {
  switch (type) {
    case 1: {
      const name = '张三';
      break;
    }
    case 2: {
      const name = '李四';
      console.log(name);
      break;
    }
    default:
      break;
  }
};

getPersonInfo(2);

Das Folgende ist ein Beispiel aus dem offiziellen Dokument: (Die falsche Schreibweise besteht darin, die geschweiften Klammern zu entfernen, daher werde ich sie hier nicht veröffentlichen.)

// Declarations outside switch-statements are valid
const a = 0;

switch (foo) {
    // The following case clauses are wrapped into blocks using brackets
    case 1: {
        let x = 1;
        break;
    }
    case 2: {
        const y = 2;
        break;
    }
    case 3: {
        function f() {}
        break;
    }
    case 4:
        // Declarations using var without brackets are valid due to function-scope hoisting
        var z = 4;
        break;
    default: {
        class C {}
    }
}

おすすめ

転載: blog.csdn.net/weixin_38629529/article/details/127133718