2017-06-30 4 views
4

Ich habe eine Funktion, die auf der Grundlage einer bestimmten Disziplin, die übergeben wird, nach der aktuellen Stufe in einem sequentiellen Stream sucht und entsprechend diesem Wert den nächsten Wert zuweist meine Angular 2 App. Es sieht etwa so aus:Sense of 'No Shadowed Variable' Warnung tslint

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

Was ich hier mache den Wert von „nextStageStep“ zurückkehrt, denn das ist, was werde ich dann für die richtige Stufe Schritt, um vorbei zu passieren.

Im Moment unterstreicht meine tslint jede der "nextStageStep" Variablenvorkommen mit der Warnung "no shadowed variables". Wenn ich die Zeile, in der ich initialisiere, auf einen leeren String lösche, verschwindet diese Warnung, aber dann bekomme ich den Fehler "NextStageStep kann nicht gefunden werden" in meiner Return-Anweisung.

Was ist das Problem mit der ursprünglichen Shadowed Variable Warnung, und gibt es eine alternative Möglichkeit, dies zu schreiben, und/oder sollte ich einfach die tslint Warnung in dieser Situation ignorieren?

Antwort

10

Der Linter beschwert sich, weil Sie die gleiche Variable mehrmals neu definieren. So ersetzen Sie die in der Schließung, die es enthält.

Statt erneut deklariert werden sie es einfach verwenden:

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

gut ja, weil es eine Konstante ist. ändere es in ein let oder var – toskv

2

Sie deklarieren in jedem if-Block dieselbe Variable const nextStageStep.

Juste ersetzenmit nextStageStep = 'step 2'; (und alle anderen wenn Fälle) und es wird alles in Ordnung sein.

3

Das mit der Definition die gleiche Variable in verschiedenen Bereichen zu tun hat. Sie definieren nextStageStep innerhalb des Funktionsumfangs & auch innerhalb jedes if-Blocks. Eine Möglichkeit ist, um loszuwerden, die Variablendeklarationen in der, wenn Blöcken

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

Hier ist eine gute Ressource ist auf beschattete Variablen http://eslint.org/docs/rules/no-shadow

+0

Das wird nicht funktionieren, wenn 'nextStageStep' nicht als' const', sondern als 'let' deklariert wird – Nerman

Verwandte Themen