webentwicklung-frage-antwort-db.com.de

tslint error Schattenname: 'Beobachtbar'

Beim Ausführen von tslint wird die folgende Fehlermeldung angezeigt, die ich vorher nicht erhalten habe.

ERROR: C:/...path..to../observable-debug-operator.ts[27, 13]: Shadowed name: 'Observable'

Ich folgte diesem Tutorial zum Hinzufügen eines Debug-Operators zu Observable, und es funktioniert einwandfrei, es sei denn, ich bekomme diesen Lint-Fehler. Ich habe diesen Debug-Operator für eine Weile verwendet, ohne den Flusenfehler zu erhalten, und ich bin mir nicht sicher, warum ich ihn jetzt bekomme.

Hier ist der Code in Zeile 27, um die Typdefinition um die Debug-Methode zu ändern

declare module 'rxjs/Observable' {
  interface Observable<T> { // line 27
    debug: (...any) => Observable<T>;
  }
}

Weiß jemand, wie ich diesen Flusenfehler löschen kann? Vielen Dank!

7
Devin Crossman

Hier ist ein schnelles Beispiel für das variable Spiegeln, um die Warnung deutlich zu machen.

var x = 4;

function example() {
    var x = 5; // x is shadowing the outer scope's x variable
}

Wenn Sie eine Erweiterung für eine Schnittstelle deklarieren (d. H. Beide Instanzen von Observable haben dieselbe gemeinsame Wurzel), werden Sie technisch nicht gespiegelt. Wenn Sie jedoch eine Observable auf mehreren Ebenen haben, kann es unklar sein, auf welche Sie sich beziehen.

Sie können Shadowing-Warnungen mit der Option ausschalten:

"no-shadowed-variable": [
  true,
  {
    "class": true,
    "enum": true,
    "function": true,
    "interface": false,
    "namespace": true,
    "typeAlias": false,
    "typeParameter": false
  }
]

Ist das Spiegeln von Schnittstellen ein Problem in TypeScript?

Nicht wirklich - Sie würden eine Situation feststellen, in der eine Schnittstelle innerhalb einer Funktion deklariert wurde, was Sie auch einfangen würden, denn wenn es ein Problem wäre, würde der TypeScript-Compiler Ihnen bereits mitteilen, dass ein Problem vorliegt ... dh das Member list würde Ihnen die korrekten Mitglieder in beiden Bereichen anzeigen.

Schnittstellen werden ebenfalls gelöscht. Es gibt also keine Verwirrung nach dem Kompilieren, zum Beispiel, wenn jemand Ihre TypeScript-Bibliothek in einem JavaScript-Programm verwendet.

Ich bin froh, meine Meinung zu ändern, wenn jemand ein realistisches Beispiel dafür liefert, wo das Spiegeln von Schnittstellen ein Problem verursachen würde.

16
Fenton

Im Grunde erklärt Fenton es ziemlich gut an seinem Beispiel. _ _ Die Schattenbildung tritt bei Namenskollisionen auf.

Warum also nicht eine verschachtelte Variable/einen anderen Parameter als x benennen? ;)

Mein Beispiel:

...
.retryWhen(error => {
  return error
    .mergeMap((error: any) => {
      if (error.status === 500) {
...

Sie sehen viele error-Parameter.

3
alex351

Ich bin nicht sicher, wie das Problem behoben wurde, aber ich habe meine Paketabhängigkeiten einschließlich tslint neu installiert. Jetzt erhalte ich den Fehler nicht mehr. Danke für deine Zeit, zu versuchen zu helfen :)

0
Devin Crossman