Making Sense of 'No Shadowed Variable' tslint Warning
Solution 1:
The linter complains because you are redefining the same variable multiple times. Thus replacing the ones in the closure containing it.
Instead of redeclaring it just use it:
private getNextStageStep(currentDisciplineSelected) {
let nextStageStep = '';
if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 1') {
nextStageStep = 'step 2';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 2') {
nextStageStep = 'step 3';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 3') {
nextStageStep = 'step 4';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 4') {
nextStageStep = 'step 5';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 5') {
nextStageStep = 'step 6';
}
return nextStageStep;
}
Solution 2:
This has to do with defining the same variable in different scopes. You are defining nextStageStep
within the function scope & also within each if block. One option is to get rid of the variable declarations in the if blocks
if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 1') {
nextStageStep = 'step 2';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 2') {
nextStageStep = 'step 3';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 3') {
nextStageStep = 'step 4';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 4') {
nextStageStep = 'step 5';
} else if (this.stageForDiscipline(this.currentDisciplineSelected) === 'step 5') {
nextStageStep = 'step 6';
}
Here is a good resource on shadowed variables http://eslint.org/docs/rules/no-shadow
Solution 3:
Addording to : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
ES6 const is BLOCK-SCOPED, thus:
{
const TAG='<yourIt>';
console.log(TAG);
}
{
const TAG = '<touchingBase NoImNOt="true">';
console.log(TAG);
}
console.log(TAG); // ERROR expected
AFAICT, this is NOT a case of shadowing - each of the constants is soped correctly within its braces.
If we cannot re-use variable names, we will wind up with unreadable programs that obscure. rather than inform.
I believe the warning is wrong-headed