typescript - noFallthroughCasesInSwitch - tillat eksplisitt fall gjennom
- Jeg har aktivert
noFallthroughCasesInSwitch-alternativet i tsconfig.json-filen. - Det alternativet advaret meg om en "feil", og jeg vil la Typescript-kompilatoren vite at det er ment.
- 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.
