如何解决不是所有代码路径都返回值的问题?

hus*_*ain 15 javascript typescript tslint

我在尝试解决的代码中有错误。我认为它需要一个return语句,但我已经在forEach循环之外,但它仍然抛出错误:

not all the code path return the value
Run Code Online (Sandbox Code Playgroud)

如何修复下面的代码?

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;
}
Run Code Online (Sandbox Code Playgroud)

the*_*Emu 38

抱怨是第一个 if(){} 缺少带有 return 语句的 else{} 块。您可以在 tsconfig 文件设置中禁用此行为:

 "noImplicitReturns": false,
Run Code Online (Sandbox Code Playgroud)

当然你也可以加

else {return ...}
Run Code Online (Sandbox Code Playgroud)

但我不建议这样做,因为 forEach 不应该返回任何内容,例如此处所述: `return` 关键字在 `forEach` 函数中意味着什么? 或在这里:https : //codeburst.io/javascript-map-vs-foreach-f38111822c0f

相反,最好完全摆脱第一个 if()。干杯


Cod*_*ker 10

您可以通过两种方式解决此错误。

  1. 通过将noImplicitReturns属性编辑为 falsetsconfig.json

    “noImplicitReturns”:假

在此输入图像描述

  1. 通过为方法中的每个路径添加 return 语句。如果有 10 个 if 条件,那么您必须添加 10 个 return 语句。这看起来很奇怪,但打字稿建议每个路径都返回。

这里我们可以通过使用 lambda 表达式来避免路径的数量。

private ValidateRequestArgs(str) {
  return str.split(",").every(el => List.includes(el));
}
Run Code Online (Sandbox Code Playgroud)


roh*_*095 6

配置文件

compilerOptions:{
  "noImplicitReturns": false
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*lms 5

我不知道为什么 tslint 会抱怨,但你可以把整个事情写得更优雅:

return str.split(",").every(el => List.includes(el));
Run Code Online (Sandbox Code Playgroud)

或 ES6:

return str.split(",").every(el => List.indexOf(el) > -1);
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以为您的函数定义返回值,如下所示:

functionName: (variableName: string): string | void => {
    if (variableName === "a") {
        return "link";
    }
};
Run Code Online (Sandbox Code Playgroud)