如何解决不是所有代码路径 return 值的问题?
How to fix the issue not all the code paths return value?
我尝试解决的代码中有错误。我认为它需要一个 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;
}
我不确定为什么 tslint 会抱怨,但是你可以把整个事情写得更优雅:
return str.split(",").every(el => List.includes(el));
或 ES6:
return str.split(",").every(el => List.indexOf(el) > -1);
传递给 forEach 的函数体有一个隐含的签名 any -> boolean
,因此 tslint 似乎希望您更静态地对待它,并在所有代码路径上使用 return 布尔值。
抱怨是第一个 if(){} 缺少带有 return 语句的 else{} 块。您可以在 tsconfig 文件设置中禁用此行为:
"noImplicitReturns": false,
当然你也可以加上
else {return ...}
但我不建议这样做,因为 forEach 不应该 return 任何内容,例如此处所述:
或在这里:
https://codeburst.io/javascript-map-vs-foreach-f38111822c0f
最好完全去掉第一个 if()。干杯
tsconfig.json
compilerOptions:{
"noImplicitReturns": false
}
您可以通过两种方式解决此错误。
通过在 tsconfig.json
中将 noImplicitReturns
属性编辑为 false
"noImplicitReturns": false
- 通过为方法中的每个路径添加 return 语句。如果你有 10 个 if 条件,那么你必须添加 10 个 return 语句。这看起来很奇怪,但是打字稿建议对每条路径使用 return。
这里我们可以通过使用lambda表达式来避免路径的数量
private ValidateRequestArgs(str) {
return str.split(",").every(el => List.includes(el));
}
如果 forEach 函数中有一个 return,那么它会将该函数识别为具有整个函数的 return 类型。
这样写你的循环没有问题:
myFunction(): boolean {
for (let item of items) {
if (condition) {
return true;
}
}
return false;
}
foreach 不需要 return 任何东西;您必须从 foreach 中删除关键字 'return' 并进行编辑,错误指向此:
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) {
ret = false // this correct
}
if (List.indexOf(val) > -1) {
ret = true;
} else {
ret = false;
}
});
return ret;
}
我尝试解决的代码中有错误。我认为它需要一个 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;
}
我不确定为什么 tslint 会抱怨,但是你可以把整个事情写得更优雅:
return str.split(",").every(el => List.includes(el));
或 ES6:
return str.split(",").every(el => List.indexOf(el) > -1);
传递给 forEach 的函数体有一个隐含的签名 any -> boolean
,因此 tslint 似乎希望您更静态地对待它,并在所有代码路径上使用 return 布尔值。
抱怨是第一个 if(){} 缺少带有 return 语句的 else{} 块。您可以在 tsconfig 文件设置中禁用此行为:
"noImplicitReturns": false,
当然你也可以加上
else {return ...}
但我不建议这样做,因为 forEach 不应该 return 任何内容,例如此处所述:
最好完全去掉第一个 if()。干杯
tsconfig.json
compilerOptions:{
"noImplicitReturns": false
}
您可以通过两种方式解决此错误。
通过在
中将tsconfig.json
noImplicitReturns
属性编辑为 false"noImplicitReturns": false
- 通过为方法中的每个路径添加 return 语句。如果你有 10 个 if 条件,那么你必须添加 10 个 return 语句。这看起来很奇怪,但是打字稿建议对每条路径使用 return。
这里我们可以通过使用lambda表达式来避免路径的数量
private ValidateRequestArgs(str) {
return str.split(",").every(el => List.includes(el));
}
如果 forEach 函数中有一个 return,那么它会将该函数识别为具有整个函数的 return 类型。
这样写你的循环没有问题:
myFunction(): boolean {
for (let item of items) {
if (condition) {
return true;
}
}
return false;
}
foreach 不需要 return 任何东西;您必须从 foreach 中删除关键字 'return' 并进行编辑,错误指向此:
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) {
ret = false // this correct
}
if (List.indexOf(val) > -1) {
ret = true;
} else {
ret = false;
}
});
return ret;
}