web-dev-qa-db-fra.com

erreur tslint Nom ombré: 'Observable'

J'obtiens l'erreur suivante lors de l'exécution de tslint que je n'avais pas auparavant ..

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

J'ai suivi ce tutorial pour ajouter un opérateur de débogage à Observable et cela fonctionne très bien, sauf que je reçois cette erreur de fibre. Cela faisait un moment que j'utilisais cet opérateur de débogage sans l'erreur de peluchage et je ne sais pas trop pourquoi je l'obtiens maintenant.

Voici le code à la ligne 27 pour modifier la définition de type avec la méthode debug

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

Est-ce que quelqu'un sait comment je peux effacer cette erreur de peluche? Je vous remercie!

7
Devin Crossman

Voici un exemple rapide d’observation variable, pour rendre l’avertissement clair.

var x = 4;

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

Si vous déclarez une extension à une interface (c'est-à-dire que les deux instances de Observable ont la même racine commune), vous ne suivez pas techniquement l'observation, mais si vous avez une Observable à plusieurs niveaux, vous risquez de ne pas savoir à quoi vous faites référence.

Vous pouvez désactiver les avertissements d'observation en utilisant l'option:

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

Est-ce que l'interface ombrage est un problème dans TypeScript?

Pas vraiment - vous attraperiez une situation où une interface a été déclarée dans une fonction , que vous attraperiez aussi parce que s'il y avait un problème, le compilateur TypeScript vous avertirait déjà qu'il y a un problème ... c'est-à-dire le membre liste vous montrerait les membres corrects dans les deux portées.

Les interfaces sont également effacées. Il n'y a donc aucune confusion post-compilation, par exemple si quelqu'un devait utiliser votre bibliothèque TypeScript dans un programme JavaScript.

Je serai ravi de changer d'avis si quelqu'un peut fournir un exemple réaliste montrant où l'observation d'interface poserait un problème.

16
Fenton

Fondamentalement, Fenton explique très bien cela avec son exemple .

Alors pourquoi ne pas nommer une variable/paramètre imbriqué autre chose que x? ;)

Mon exemple:

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

Vous voyez, beaucoup de paramètres error.

3
alex351

Je ne sais pas comment cela a résolu le problème, mais j'ai réinstallé les dépendances de mon paquetage, y compris tslint, et je ne reçois plus l'erreur. Merci pour votre temps en essayant d'aider :)

0
Devin Crossman