Donner du Sens au "Pas de l'Ombre de la Variable' tslint Avertissement
J'ai une fonction qui vérifie pour la phase actuelle dans un flux séquentiel, basé sur une discipline particulière qui est transmis, et, en fonction de cette valeur, attribue la valeur suivante dans mon Angulaire 2 app. Il ressemble à quelque chose comme ceci:
private getNextStageStep(currentDisciplineSelected) {
const nextStageStep = '';
if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 1') {
const nextStageStep = 'step 2';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 2') {
const nextStageStep = 'step 3';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 3') {
const nextStageStep = 'step 4';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 4') {
const nextStageStep = 'step 5';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 5') {
const nextStageStep = 'step 6';
}
return nextStageStep;
}
Ce que je fais ici est de retour la valeur de "nextStageStep", parce que c'est ce que je vais passer pour le bon stade de l'étape à passer.
Pour l'instant, mon tslint est en soulignant à chaque de la "nextStageStep" variable des événements en lien avec l'avertissement "pas l'ombre variables". Si je supprime la ligne où j'ai initialiser une chaîne vide que l'avertissement disparaît, mais puis-je obtenir le message d'erreur "Impossible de trouver nextStageStep" qui apparaissent dans mon instruction return.
Quel est le problème avec l'original de l'ombre de la variable d'avertissement, et s'il y a une autre façon d'écrire cela, et/ou devrais-je simplement ignorer les tslint avertissement dans cette situation?
OriginalL'auteur Ademo | 2017-06-30
Vous devez vous connecter pour publier un commentaire.
Le linter se plaint parce que vous êtes à la redéfinition de la même variable plusieurs fois. Ainsi, le remplacement de ceux de la fermeture de contenant.
Au lieu de redeclaring il suffit d'utiliser:
OriginalL'auteur toskv
Cela a à voir avec la définition de la même variable dans les différents champs d'application. Vous définissez
nextStageStep
à l'intérieur de la portée de la fonction & également à l'intérieur de chaque bloc if. Une option est de se débarrasser de la déclaration des variables dans le cas des blocsIci est une bonne ressource sur l'ombre des variables http://eslint.org/docs/rules/no-shadow
nextStageStep
est déclarée commelet
, au lieu deconst
OriginalL'auteur LLai
Vous sont re-déclarer la même variable
const nextStageStep
dans chaque bloc if.Juste remplacer
const nextStageStep = 'step 2';
avecnextStageStep = 'step 2';
(et tous les autres cas) et ça va être tout droit.OriginalL'auteur FatL
Addording : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
ES6 const est le BLOC de PORTÉE, donc:
AFAICT, c'est PAS un cas de jumelage - chacune des constantes est soped correctement à l'intérieur de ses accolades.
Si l'on ne peut pas ré-utiliser des noms de variable, nous allons nous retrouver avec illisible programmes obscur. plutôt que d'informer.
Je crois que l'avertissement se trompent
T
, mais la question d'origine est avecnextStageStep
. Ombrage ne signifie pas que la constante est en train d'être redéfini de manière illégale (const x = 1; const x = 2
), juste qu'il pourrait être une erreur si vous avez une erreur qui var/const/laissez-vous consulter. C'est une question de point vous permettre de répétition, mais vous pouvez dire que cette règle a ramassé les OP de l'erreur ici, de sorte que vous pouvez le voir, il avait un but.OriginalL'auteur Charles Hebdough
En général, cette erreur se produit Lorsqu'une variable dans une portée locale et une variable dans le champ d'application du même nom, la filature se produit. Observation au fait qu'il est impossible d'accéder à la variable dans le champ d'application et obscurcit à ce que la valeur d'un identificateur " fait référence
OriginalL'auteur Junaid