gpt4 book ai didi

angular - 使用开关时 tslint 提示 "statements must be filtered with an if statement"

转载 作者:太空狗 更新时间:2023-10-29 16:56:10 26 4
gpt4 key购买 nike

假设我有以下方法:

getErrorMessage(state: any, thingName?: string) {
const thing: string = state.path || thingName;
const messages: string[] = [];
if (state.errors) {
for (const errorName in state.errors) {
switch (errorName) {
case 'required':
messages.push(`You must enter a ${thing}`);
break;
case 'minlength':
messages.push(`A ${thing} must be at least ${state.errors['minlength'].requiredLength}characters`);
break;
case 'pattern':
messages.push(`The ${thing} contains illegal characters`);
break;
case 'validateCardNumberWithAlgo':
messages.push(`Card doesnt pass algo`);
break;
}
}
}
return messages;
}

当我运行时

ng lint

我收到以下错误:

for (... in ...) 语句必须用 if 语句过滤

看看类似的question我认为这个答案不适用于我的情况。毕竟 switch 语句属于 if-else-if 阶梯的范畴。

tslint 应该将 switch 语句视为 if 语句的形式,但事实并非如此?!

最佳答案

这让我很好奇,所以我查看了 TSlint source code对于这条规则。它有一个名为 isFiltered 的函数,它似乎只检查 ts.SyntaxKind.IfStatement,而不检查 ts.SyntaxKind.SwitchStatement

function isFiltered({statements}: ts.Block): boolean {
switch (statements.length) {
case 0: return true;
case 1: return statements[0].kind === ts.SyntaxKind.IfStatement;
default:
return statements[0].kind === ts.SyntaxKind.IfStatement && nodeIsContinue((statements[0] as ts.IfStatement).thenStatement);
}

}

因此,除非您想将对象转换为数组,否则您将需要使用您提供的链接中的修复程序。 Object.keysif 语句:

    for (const errorName in state.errors) {
if (state.errors.hasOwnProperty(errorName)) {
switch (errorName) {

有趣的是,您可以使用任何类型的 if 语句,错误都会消失。不会检查您是否正在调用 hasOwnProperty

关于angular - 使用开关时 tslint 提示 "statements must be filtered with an if statement",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44267094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com