J'ai extrait un exemple de code de modèle de ce didacticiel et j'ai suivi les deux étapes ci-dessous pour commencer -
npm install // worked fine and created node_modules folder with all dependencies
npm start
// a échoué avec l'erreur ci-dessous-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 '<T, 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'. npm ERR! code ELIFECYCLE npm ERR! errno 2
Je vois que dans la déclaration de levée subject.d.ts est comme ci-dessous -
lift<T, R>(operator: Operator<T, R>): Observable<T>;
Et dans Observable.ts, il est défini comme ci-dessous-
lift<R>(operator: Operator<T, R>): Observable<R> {
Remarque: - 1. Je suis nouveau sur Angular2 et j'essaie de me procurer des choses.
L'erreur peut être due à des définitions incompatibles de la méthode de levage
J'ai lu ce fil de discussion github
Si j'ai besoin d'installer une version différente de rxjs, veuillez indiquer comment désinstaller et installer les bons rxjs.
Edit1: Je suis peut-être un peu en retard pour répondre ici mais j'obtiens toujours la même erreur même après avoir utilisé typescript 2.3.4 ou rxjs 6 alpha . Voici mon package.json,
{
"name": "angular-quickstart",
"version": "1.0.0",
"scripts": {
"start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ",
"lite": "lite-server",
"postinstall": "typings install",
"tsc": "tsc",
"tsc:w": "tsc -w",
"typings": "typings"
},
"license": "ISC",
"dependencies": {
"@angular/common": "2.0.0",
"@angular/compiler": "2.0.0",
"@angular/core": "2.0.0",
"@angular/forms": "2.0.0",
"@angular/http": "2.0.0",
"@angular/platform-browser": "2.0.0",
"@angular/platform-browser-dynamic": "2.0.0",
"@angular/router": "3.0.0",
"@angular/upgrade": "2.0.0",
"core-js": "^2.4.1",
"reflect-metadata": "^0.1.3",
"rxjs": "6.0.0-alpha.0",
"systemjs": "0.19.27",
"zone.js": "^0.6.23",
"angular2-in-memory-web-api": "0.0.20",
"bootstrap": "^3.3.6"
},
"devDependencies": {
"concurrently": "^2.2.0",
"lite-server": "^2.2.2",
"typescript": "2.3.4",
"typings": "^1.3.2"
}
}
la source
Réponses:
Comme pour cela, vous avez besoin de la mise à jour de typescript 2.3.4 ou rxjs 6 alpha
allez dans votre fichier package.json dans la version typographique ou rxjs de votre mise à jour de projet. Exemple
faire
npm install
mise à jour (29/06/2017): -
Selon le
"2.4.0"
travail dactylographié des commentaires .la source
"typescript": "^2.3.4"
correspondra à 2.4.1 et 2.4 est la version qui expose le problème avec RxJS."typescript": "2.3.0"
et"rxjs": "5.4.1"
travaillé pour moiComme d'autres l'ont souligné, ce problème est survenu à la suite de la vérification de type plus stricte des génériques introduite dans TypeScript 2.4. Cela a exposé une incohérence dans une définition de type RxJS et a par conséquent été corrigé dans la version 5.4.2 de RxJS . La solution idéale est donc de simplement passer à la version 5.4.2.
Si, pour une raison quelconque, vous ne pouvez pas mettre à niveau vers la version 5.4.2, vous devez à la place utiliser la solution d'Alan Haddad consistant à augmenter la déclaration de type pour la corriger pour votre propre projet. Ie ajouter cet extrait à votre application:
Sa solution ne laissera aucun autre effet secondaire et est donc excellente. Les solutions proposées alternativement ont plus d'effets secondaires pour la configuration de votre projet et sont donc moins idéales:
--noStrictGenericChecks
. Cela la rendra cependant moins stricte pour votre propre application, ce que vous pouvez faire, mais pourrait introduire des définitions de type incohérentes comme cela a été le cas dans cette instance RxJS, ce qui pourrait à son tour introduire plus de bogues dans votre application.la source
Une approche de pansement admise consiste à ajouter ce qui suit à votre fichier tsconfig.json jusqu'à ce que les gens de RxJS décident de ce qu'ils veulent faire à propos de l'erreur lors de l'utilisation de TypeScript 2.4.1:
la source
skipLibCheck
. Si vous faites cela, vous risquez de surmonter d'autres problèmes. Une meilleure solution estnoStrictGenericChecks
jusqu'à ce que RxJS soit mis à jour.Vous pouvez temporairement contourner le problème à l'aide de l' extension de module
Le code suivant a résolu le problème pour moi. Une fois que RxJS a une version stable qui ne présente pas ce problème, elle doit être supprimée.
S'il est peut-être ironique que RxJS lui-même fasse un usage aussi intensif de cette technique pour décrire sa propre forme, elle est en fait généralement applicable à un éventail de problèmes.
Bien qu'il y ait certainement des limites et des aspérités, une partie de ce qui rend cette technique puissante est que nous pouvons l'utiliser pour améliorer les déclarations existantes en les rendant plus sûres sans bifurquer et maintenir l'ensemble du fichier.
la source
"paths"
intsconfig.json
pour spécifier explicitement où"rxjs"
et"rxjs/*"
doit résoudre pour la vérification de type. Cependant, avoir plusieurs versions est susceptible de provoquer des problèmes d'exécution. Même si vous n'utilisez pasinstanceof
et d'autres tests de ce type, vos deps peuvent être moins raisonnés. La meilleure chose à faire est d'ouvrir un problème avec videogular2 suggérant de changer RxJS en une dépendance homologue.dans package.json
"rxjs": "^5.4.2",
et "typescript": "^ 2.3.4", alors npm install et ng servent son fonctionnement.la source
Juste un petit détail, pour tenter de mettre mes deux cents.
Le problème se pose lorsque nous mettons à jour Typescript vers la dernière version, qui était maintenant TypeScript 2.4.1 , ["car nous aimons les mises à niveau :) "], et comme mentionné par @ Jonnysai dans sa réponse et le lien fourni ici, il y a une discussion détaillée concernant le problème et ses correctifs.
Alors, que travaillé pour moi était:
1. Je devais Un installer tapuscrit 2.4.1 d' abord, en allant au Panneau de configuration > Programmes et fonctionnalités ...
2. Installez, à nouveau, tapuscrit 2.4.0 , puis assurez - vous que, dans
package.json
fichier, vous avez cette configuration, comme mentionné ici dans un détail un peu plus court. Vous pouvez télécharger TypeScript 2.4.0 à partir d' ici , pour Visual Studio 2015la source
Vous pouvez utiliser temporairement
--noStrictGenericChecks
indicateur pour contourner ce problème dans TypeScript 2.4.Ceci est
--noStrictGenericChecks
sur la ligne de commande, ou juste"noStrictGenericChecks": true
dans le"compilerOptions"
champ danstsconfig.json
.Gardez à l'esprit que RxJS 6 aura ce problème corrigé.
Voir cette question similaire: Comment contourner cette erreur dans RxJS 5.x dans TypeScript 2.4?
la source
Veuillez modifier la ligne de
Subject.d.ts
fichier suivante:à:
Le type de retour devrait probablement être
Observable<R>
plutôt queObservable<T>
la source
Gardez l'option noStrictGeneric true dans le fichier tsconfig.config
la source
Ajoutez "noStrictGenericChecks": true dans le fichier tsconfig.json sous le nœud "compilerOptions" comme indiqué dans l'image ci-dessous et créez l'application. J'ai rencontré la même erreur après avoir ajouté cette erreur résolue.
la source
J'ai trouvé le même problème et je l'ai résolu en utilisant "rxjs": "5.4.1" , "typescript": "~ 2.4.0" et en ajoutant "noStrictGenericChecks": true dans tsconfig.json.
la source
RxJS 6 aura ce problème corrigé, mais comme solution de contournement temporaire, vous pouvez utiliser le
noStrictGenericChecks
option compilateur.Dans
tsconfig.json
, mettez-lecompilerOptions
et réglez-le sur true.Sur la ligne de commande c'est
--noStrictGenericChecks
.Pourquoi cela se produit:
TypeScript 2.4 a un changement de rigueur et Subject ne monte pas vers le bon observable. La signature aurait vraiment dû être
Cela sera corrigé dans RxJS 6.
la source
Accédez au fichier Package.json et modifiez la configuration ci-dessous
Ça va marcher
la source
L'utilisation de ce qui précède seul n'a pas aidé, cependant, en utilisant l'approche suivante: Comment contourner cette erreur «Le sujet étend incorrectement Observable» dans TypeScript 2.4 et RxJs 5
résolu les problèmes. Il est également mentionné que le problème a été résolu dans RxJs 6, il s'agit donc plus d'un correctif temporaire, ce qui m'a aidé à exécuter avec succès cet excellent exemple (qui compilé auparavant mais qui a donné l'erreur pendant le chargement): Développement d'applications Angular 4 avec Bootstrap 4 et TypeScript
la source
réinstallation de rxjs -> npm install rxjs @ 6 rxjs-compat @ 6 --save
la source
Maintenant, nous n'avons plus besoin du module natif ionique - nous n'avons besoin que de @ ionic-native / core. Courir
Cela résoudra votre problème.
la source
il suffit d'ajouter
à votre tsconfig.json
la source
merci la réponse de zmag et Rahul Sharma, ça marche! @zmag @Rahul Sharma
mon problème est le suivant:
typings/globals/core-js/index.d.ts:3:14 - error TS2300: Duplicate identifier
Apportez des modifications comme.
Accédez au fichier Package.json et modifiez la configuration ci-dessous
la source
oui, le problème était avec TypeScript 2.4.1.Je viens de le désinstaller du panneau de configuration et cela fonctionne pour moi car Visual Studio 2017 l'a déjà.
la source