typescript - noFallthroughCasesInSwitch - tillat eksplisitt fall gjennom


  1. Jeg har aktivert noFallthroughCasesInSwitch-alternativet i tsconfig.json-filen.
  2. Det alternativet advaret meg om en "feil", og jeg vil la Typescript-kompilatoren vite at det er ment.
  3. Det er ikke dokumentert, og eksempelene på nettet fungerer ikke for meg - hvordan kan jeg markere det som tilsiktet?
function getRandomInt(max: number) {
  return Math.floor(Math.random() * max);
}

switch(getRandomInt(3)) {
  /* falls through */
  /* fall through */
  /* FALLTHROUGH */
  case 1: /* falls through */ /* fall through */ /* FALLTHROUGH */ /* <----- Still getting an error here "Fallthrough case in switch. (7029)" */
    /* falls through */
    /* fall through */
    /* FALLTHROUGH */
    console.log(1);
    /* falls through */
    /* fall through */
    /* FALLTHROUGH */
  case 2:
    console.log(2);
    break;
}

Feilen kan også sees i denne lenken: link. Men det er en feil i TS Playground, så du må manuelt klikke på menyen "TS Config" og deretter krysse av for noFallthroughCasesInSwitch-alternativet slik at det blir aktivert, ellers vil du ikke se feilen.

Svar #1

Tre alternativer:

1 - Bruk @ts-ignore for å undertrykke feilen

Som du gjorde, ville jeg alltid inkludere en kommentar som tydelig uttrykker dette, inkludert hvilken case det faller gjennom til:

function getRandomInt(max: number) {
  return Math.floor(Math.random() * max);
}

switch(getRandomInt(3)) {
  // @ts-ignore
  case 1:
    console.log(1);
    // FALLS THROUGH to 2
  case 2:
    console.log(2);
    break;
}

2 - Bruk @ts-expect-error (TypeScript 3.9+)

Eller med TypeScript 3.9 kan du bruke @ts-expect-error slik at hvis noen redigerer koden (eller konfigurasjonen) for å fjerne feilen, varsler TypeScript deg om det:

function getRandomInt(max: number) {
  return Math.floor(Math.random() * max);
}

switch(getRandomInt(3)) {
  // @ts-expect-error
  case 1:
    console.log(1);
    // FALLS THROUGH to 2
  case 2:
    console.log(2);
    break;
}

3 - Ikke fall gjennom

Alternativt kan du stable etikettene slik at case 1-etiketten er tom (den faller fortsatt gjennom, men TypeScripts noFallthroughCasesInSwitch utløses bare av ikke-tomme case-etiketter som faller gjennom, ikke stablede [tomme etterfulgt av ikke-tomme]):

function getRandomInt(max: number) {
  return Math.floor(Math.random() * max);
}

const n = getRandomInt(3);
switch(n) {
  case 1:
  case 2:
    if (n === 1) {
      console.log(1);
    }
    console.log(2);
    break;
}

Svar #2

Måten jeg endelig løste det på: Jeg har deaktivert noFallthroughCasesInSwitch-alternativet i tsconfig.json-filen og installert ESLint i stedet.

TypeScript gjør veldig lite linting, og pleide å ha TSLint som en komplementær linter, som nå er utdatert og erstattet av ESLint.

Min personlige mening er at TypeScript ikke bør foreslå endringer i koden på egen hånd som ikke forventes å feile byggeprosessen deres, og de bør bruke et tredjeparts linting-verktøy som ESLint. Å gjøre bare noe linting fører til upolerte regler og problemer som spørsmålet mitt ovenfor.

Relaterte artikler