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

新手上路,请多包涵

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

 not all the code path return the value

如何修复以下代码?

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;
}

原文由 hussain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

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

 return str.split(",").every(el => List.includes(el));

或 ES6:

 return str.split(",").every(el => List.indexOf(el) > -1);

原文由 Jonas Wilms 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

  "noImplicitReturns": false,

当然你也可以添加

else {return ...}

但我不建议这样做,因为 forEach 不应返回任何内容,例如此处所述: What does `return` keyword mean inside `forEach` function? 或者在这里: https ://codeburst.io/javascript-map-vs-foreach-f38111822c0f

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

原文由 theRealEmu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题