variable shadowed reject name javascript angular typescript tslint

javascript - reject - Entendiendo la advertencia de ''No Shadowed Variable'' tslint



tslint shadowed name reject no shadowed variable (5)

Tengo una función que verifica la etapa actual en una secuencia secuencial, basada en una disciplina particular que se pasa y, de acuerdo con ese valor, asigna el siguiente valor en mi aplicación Angular 2. Se ve algo como esto:

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; }

Lo que estoy haciendo aquí es devolver el valor de "nextStageStep", porque eso es lo que luego pasaré para que suceda el paso de la etapa correcta.

En este momento, mi tslint está subrayando cada una de las ocurrencias de la variable "nextStageStep" con la advertencia "sin variables sombreadas". Si elimino la línea en la que inicializo una cadena vacía, esa advertencia desaparece, pero luego aparece el error "No se puede encontrar nextStageStep" en la declaración de devolución.

¿Cuál es el problema con la advertencia de la variable sombreada original, y hay una forma alternativa de escribir esto, y / o debería simplemente ignorar la advertencia de tslint en esta situación?


Agregado a: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const

ES6 const es BLOCK-SCOPED, por lo tanto:

{ const TAG=''<yourIt>''; console.log(TAG); } { const TAG = ''<touchingBase NoImNOt="true">''; console.log(TAG); } console.log(TAG); // ERROR expected

AFAICT, este NO es un caso de sombras, cada una de las constantes se sopla correctamente entre sus llaves.

Si no podemos reutilizar los nombres de variables, terminaremos con programas ilegibles que ocultan. en lugar de informar.

Creo que la advertencia es equivocada.


El cursor se queja porque está redefiniendo la misma variable varias veces. Así se reemplazan los que están en el cierre que lo contiene.

En lugar de volver a declararlo, solo úselo:

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; }


En general, este error se produce cuando una variable en un ámbito local y una variable en el ámbito que contiene tienen el mismo nombre, se produce el sombreado. El sombreado hace que sea imposible acceder a la variable en el ámbito que contiene y oculta a qué valor se refiere realmente un identificador

Consulte este article para obtener ejemplos de código que expliquen esto.


Está volviendo a declarar la misma variable const nextStageStep en cada bloque if.

Juste reemplaza const nextStageStep = ''step 2''; con nextStageStep = ''step 2''; (y todo lo demás si es un caso) y todo estará bien.


Esto tiene que ver con definir la misma variable en diferentes ámbitos. Está definiendo nextStageStep dentro del alcance de la función y también dentro de cada bloque if. Una opción es deshacerse de las declaraciones de variables en los bloques if

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''; }

Aquí hay un buen recurso sobre las variables sombreadas http://eslint.org/docs/rules/no-shadow