tslint se plaindre “des déclarations doit être filtré avec une instruction if” lors de l'utilisation de l'interrupteur
Permet de dire que j'ai la méthode suivante:
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;
}
quand je lance
ng lint
J'obtiens l'erreur suivante :
pour ( ... ... ) les déclarations doivent être filtrées avec une instruction if
Avoir un look similaire à celui de question je ne pense pas que la réponse serait applicable à ma situation. Après tout, l'instruction switch se trouve dans la catégorie de si-sinon-si l'échelle.
tslint devraient envisager d'instruction switch comme une forme de déclaration, mais si il ne l'est pas?!
utiliser si d'autre à la place de l'interrupteur?
Voulez-vous suggérer la même chose si j'avais 100 conditions à vérifier?
En fait, je peux vous suggérer de refactoriser l'intérieur de la boucle en quelque chose d'autre. 🙂 Un appel de méthode, ou peut-être la carte sur les erreurs de la matrice de la création de la liste de messages d'erreur. 🙂
Double Possible de Ce qui ne l'JSLint erreur "corps de un pour dans doit être enveloppé dans une instruction if"?
Je pense que le point est que la règle dit qu'un
Voulez-vous suggérer la même chose si j'avais 100 conditions à vérifier?
En fait, je peux vous suggérer de refactoriser l'intérieur de la boucle en quelque chose d'autre. 🙂 Un appel de méthode, ou peut-être la carte sur les erreurs de la matrice de la création de la liste de messages d'erreur. 🙂
Double Possible de Ce qui ne l'JSLint erreur "corps de un pour dans doit être enveloppé dans une instruction if"?
Je pense que le point est que la règle dit qu'un
if
déclaration doit venir après le for...in
, et une instruction switch peut être vu comme une sorte de if
déclaration, pourtant, il ne permet pas de résoudre l'erreur.
OriginalL'auteur MHOOS | 2017-05-30
Vous devez vous connecter pour publier un commentaire.
Cela m'a rendu curieux, j'ai donc vérifié les TSlint code source pour cette règle. Il a une fonction appelée
isFiltered
qui semble être la seule à vérifierts.SyntaxKind.IfStatement
, pas pourts.SyntaxKind.SwitchStatement
.De sorte que si vous voulez convertir votre objet dans un tableau, vous aurez besoin d'utiliser un correctif à partir du lien que vous avez fourni. Soit
Object.keys
, ou unif
déclaration:La chose intéressante est que vous pouvez avoir tout type de
if
instruction et l'erreur s'en aller. Il n'existe pas de vérifier pour voir si vous appelezhasOwnProperty
.OriginalL'auteur Frank Modica
La règle est destinée à vous empêcher d'accéder à des propriétés définies sur l'objet prototype lors de l'utilisation de pour .. dans.
Vous pouvez cependant refactoriser le code de tout simplement ne pas l'utiliser, et de le rendre plus facile à maintenir et à développer ainsi.
Un exemple serait celui-ci:
Vous pouvez voir un extrait dans la cour de récréation ici.
OriginalL'auteur toskv