javascript - Hvordan fikse problemet der ikke alle kodeveier returnerer en verdi?


Jeg har en feil i koden som jeg prøver å løse. Jeg tror det trenger en return-setning, men jeg har allerede det utenfor forEach-løkka, men det gir fortsatt feilen:

not all the code path return the value

Hvordan fikse koden nedenfor?

main.ts:

private ValidateRequestArgs(str) {
  let ret: boolean = true;
  // here on val its throwing tslint error not all code paths return value 
  str.split(',').forEach((val) => {
    if (!ret) {
      return false;
    }
    if (List.indexOf(val) > -1) {
      ret = true;
    } else {
      ret = false;
    }
  });
  return ret;
}

Svar #1

Klagen er at den første if(){} mangler en else{}-blokk med en return-setning. Du kan deaktivere denne oppførselen i tsconfig.json:

compilerOptions:{
  :
  "noImplicitReturns": false,
  :
}

Selvfølgelig kunne du også legge til

else {return ...}

Men jeg vil ikke anbefale det, siden forEach ikke skal returnere noe, som for eksempel angitt her: Hva betyr `return`-nøkkelordet inne i `forEach`-funksjonen? eller her: https://codeburst.io/javascript-map-vs-foreach-f38111822c0f

I stedet er det bedre å kvitte seg med den første if() helt. Skål

Svar #2

tsconfig.json

compilerOptions:{
  "noImplicitReturns": false
}

Svar #3

Du kan løse denne feilen på to måter.

  1. Ved å redigere noImplicitReturns-attributtet til false i tsconfig.json

    "noImplicitReturns": false

  1. Ved å legge til en return-setning for hver vei i metoden din. Hvis du har 10 if-betingelser, må du legge til 10 return-setninger. Det virker rart, men TypeScript anbefaler return for hver vei.

Her kan vi unngå antall stier ved bruk av lambda-uttrykk.

private ValidateRequestArgs(str) {
  return str.split(",").every(el => List.includes(el));
}

Relaterte artikler