46 votes

Comment puis-je contourner cette erreur "Le sujet étend incorrectement Observable" dans TypeScript 2.4 et RxJS 5.x?

Lorsque je compile, l'erreur de compilateur suivante apparaît dans les fichiers de déclaration RxJS:

 node_modules/rxjs/Subject.d.ts(16,22): error TS2415: Class 'Subject<T>' incorrectly extends base class 'Observable<T>'.
  Types of property 'lift' are incompatible.
    Type '<R>(operator: Operator<T, R>) => Observable<T>' is not assignable to type '<R>(operator: Operator<T, R>) => Observable<R>'.
      Type 'Observable<T>' is not assignable to type 'Observable<R>'.
         Type 'T' is not assignable to type 'R'.
 

Que se passe-t-il ici et comment résoudre ce problème sans passer à une version antérieure à TypeScript 2.3 ou antérieure?

130voto

Daniel Rosenwasser Points 7171

Solution

RxJS 5.4.2 devrait maintenant fonctionner parfaitement avec Tapuscrit 2.4.1. Tout simplement la mise à niveau vers 5.4.2+ si possible.

npm install --save rxjs@^5.4.2

Si pas, ci-dessous la solution devrait fonctionner.

Solution Alternative

Des versions plus récentes de RxJS aura ce problème, mais comme une solution temporaire, vous pouvez utiliser l' noStrictGenericChecks option du compilateur.

En tsconfig.json, le mettre dans "compilerOptions" et réglez - true.

{
    "compilerOptions": {
        "noStrictGenericChecks": true
    }
}

Sur la ligne de commande c'est --noStrictGenericChecks.

Pourquoi il se passe

Tapuscrit 2.4 a une rigueur changement, et Subject<T> n'est pas levée pour le corriger Observable. La signature devrait vraiment avoir été

<R>(operator: Operator<T, R>) => Observable<R>

Cela sera corrigé dans les RxJS 6.

14voto

Karthik Elumalai Points 1286

Aujourd'hui, face à cette erreur, et résolu ce pratiquement avec le ci-dessous en trois étapes. Donc partager la même avec l'espoir, il va aider les autres.

Étape 1: Dans le package.fichier json modifiez l'entrée de la "rxjs": "5.4.2",

Étape 2: Supprimer le dossier node_modules du projet,qui est présent dans le répertoire racine

Étape 3 : Maintenant ,cliquez-Droit sur le package.fichier json et cliquez sur restaurer comme indiqué ci-dessous: enter image description here

Remarque : Il sera de nouveau créer node_module dossier avec les nouveaux fichiers, Maintenant construire la solution, j'espère que vous ne devriez pas obtenir toute erreur de construction liées au problème ci-dessus.

12voto

shaishav shukla Points 188

Ajouter

 "noStrictGenericChecks": true
 

dans le fichier tsconfig.json

7voto

Krishna Points 1894

J'ai apporté les deux modifications ci-dessous au fichier package.json.

1) a changé la version de rxjs en 5.4.1 dans la section des dépendances.

"dépendances": {
"rxjs": "5.4.1"}

2) a changé la version de la machine à écrire 2.4.0 dans la section devDependencies.

"devDependencies": {"typescript": "2.4.0"}

J'ai exécuté la commande ' npm install ' après avoir effectué les deux modifications et cela a fonctionné.

3voto

JustLearning Points 821

Dans votre classe de sujet:

changer cette ligne:

 lift<R>(operator: Operator<T, R>): Observable<T>;
 

à :

 lift<R>(operator: Operator<T, R>): Observable<R>;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X