Extraje un código de plantilla de muestra de este tutorial e hice los siguientes dos pasos para comenzar:
npm install // worked fine and created node_modules folder with all dependencies
npm start
// falló con el siguiente error-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
Veo que en el asunto. Su declaración de elevación es la siguiente:
lift<T, R>(operator: Operator<T, R>): Observable<T>;
Y en Observable.ts se define a continuación:
lift<R>(operator: Operator<T, R>): Observable<R> {
Nota: - 1. Soy nuevo en Angular2 y estoy tratando de conseguir cosas.
El error puede deberse a definiciones incompatibles del método de elevación.
Leí este hilo de github
Si necesito instalar alguna versión diferente de rxjs, indíquenos cómo desinstalar e instalar los rxjs correctos.
Edit1: Puede que tarde un poco en responder aquí, pero sigo recibiendo el mismo error incluso después de usar mecanografiado 2.3.4 o rxjs 6 alpha . A continuación se muestra mi 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"
}
}
angular
typescript
rxjs
Deepak S
fuente
fuente
Respuestas:
Según esto , necesita actualizar mecanografiado 2.3.4 o rxjs 6 alpha
vaya al archivo package.json en la versión de mecanografiado o rxjs de actualización de su proyecto. Ejemplo
hacer
npm install
actualización (29/06/2017): -
Según los comentarios de
"2.4.0"
trabajo mecanografiado .fuente
"typescript": "^2.3.4"
coincidirá con 2.4.1 y 2.4 es la versión que expone el problema con RxJS."typescript": "2.3.0"
y"rxjs": "5.4.1"
funcionó para míComo otros han señalado, este problema surgió como consecuencia de la comprobación de tipo más estricta de los genéricos introducida en TypeScript 2.4. Esto expuso una inconsistencia en una definición de tipo RxJS y, en consecuencia, se corrigió en la versión 5.4.2 de RxJS . Entonces, la solución ideal es simplemente actualizar a 5.4.2.
Si por alguna razón no puede actualizar a 5.4.2, debería usar la solución de Alan Haddad de aumentar la declaración de tipo para arreglarlo para su propio proyecto. Es decir, agregue este fragmento a su aplicación:
Su solución no dejará otros efectos secundarios y, por lo tanto, es excelente. Alternativamente, las soluciones propuestas tienen más efectos secundarios para la configuración de su proyecto y, por lo tanto, son menos ideales:
--noStrictGenericChecks
. Sin embargo, esto hará que sea menos estricto para su propia aplicación, lo que puede hacer, pero podría introducir definiciones de tipo inconsistentes como lo hizo en esta instancia de RxJS, lo que a su vez podría introducir más errores en su aplicación.fuente
Un enfoque de curita admitido es agregar lo siguiente a su archivo tsconfig.json hasta que la gente de RxJS decida qué quieren hacer con el error al usar TypeScript 2.4.1:
fuente
skipLibCheck
. Si está haciendo eso, posiblemente esté pasando por alto otros problemas. Una mejor solución esnoStrictGenericChecks
hasta que se actualice RxJS.Puede solucionar temporalmente el problema mediante el aumento de módulos
El siguiente código resolvió el problema por mí. Una vez que RxJS tenga una versión estable que no presente este problema, debería eliminarse.
Si bien es quizás irónico que el propio RxJS haga un uso tan intensivo de esta técnica para describir su propia forma, en realidad es generalmente aplicable a una serie de problemas.
Si bien ciertamente existen límites y asperezas, parte de lo que hace que esta técnica sea poderosa es que podemos usarla para mejorar las declaraciones existentes, haciéndolas más seguras sin bifurcar y mantener todo el archivo.
fuente
"paths"
intsconfig.json
para especificar explícitamente dónde"rxjs"
y"rxjs/*"
debe resolverse para la verificación de tipos. Sin embargo, es probable que tener varias versiones cause problemas de ejecución. Incluso si no usainstanceof
otras pruebas similares, sus departamentos pueden tener menos principios. Lo mejor que puede hacer es abrir un problema con videogular2 que sugiere cambiar RxJS a una dependencia de pares.en package.json
"rxjs": "^5.4.2",
y "typescript": "^ 2.3.4", luego npm install y ng sirven para que funcione.fuente
Solo un poco de detalle, en un intento de poner mi granito de arena.
El problema surge cuando actualizamos TypeScript a la última versión, que ahora era TypeScript 2.4.1 , ["ya que nos encantan las actualizaciones :) "], y como lo menciona @ Jonnysai en su respuesta y el enlace que se proporciona allí, hay una discusión detallada sobre el problema y sus soluciones.
Por lo tanto, lo que trabajó para mí era:
1. Tenía que Un instale mecanografiado 2.4.1 En primer lugar, al ir a Panel de control > Programas y características ...
2. Instalar, de nuevo, mecanografiado 2.4.0 , y luego asegurarse, en
package.json
archivo, tiene esta configuración, como se menciona aquí en un detalle más breve. Puede descargar TypeScript 2.4.0 desde aquí , para Visual Studio 2015fuente
Puede usar temporalmente la
--noStrictGenericChecks
bandera para evitar esto en TypeScript 2.4.Esto está
--noStrictGenericChecks
en la línea de comando o simplemente"noStrictGenericChecks": true
en el"compilerOptions"
campo detsconfig.json
.Tenga en cuenta que RxJS 6 tendrá esto corregido.
Vea esta pregunta similar: ¿Cómo puedo solucionar este error en RxJS 5.x en TypeScript 2.4?
fuente
Cambie la siguiente línea de
Subject.d.ts
archivo:a:
El tipo de retorno probablemente debería ser en
Observable<R>
lugar deObservable<T>
fuente
Mantenga la opción noStrictGeneric verdadera en el archivo tsconfig.config
fuente
Agregue "noStrictGenericChecks": verdadero en el archivo tsconfig.json en el nodo "compilerOptions" como se muestra en la imagen de abajo y compile la aplicación. Me he enfrentado al mismo error después de agregar este error resuelto.
fuente
Encontré el mismo problema y lo resolví usando "rxjs": "5.4.1" , "mecanografiado": "~ 2.4.0" y agregando "noStrictGenericChecks": true en tsconfig.json.
fuente
RxJS 6 tendrá esto fijo, pero como solución temporal, puede usar la
noStrictGenericChecks
opción del compilador.En
tsconfig.json
,compilerOptions
colóquelo y configúrelo en verdadero.En la línea de comando está
--noStrictGenericChecks
.Por qué está sucediendo:
TypeScript 2.4 tiene un cambio de rigor y el sujeto no se eleva al Observable correcto. La firma realmente debería haber sido
Esto se solucionará en RxJS 6.
fuente
Vaya al archivo Package.json y modifique la siguiente configuración
Funcionará
fuente
Sin embargo, usar lo anterior solo no ayudó, usar el siguiente enfoque: ¿Cómo puedo evitar este error de "El sujeto extiende incorrectamente observable" en TypeScript 2.4 y RxJs 5
resuelto los problemas. También se menciona allí que el problema se ha solucionado en RxJs 6, por lo que esta es más una solución temporal, que me ayudó a ejecutar con éxito este gran ejemplo (que se compiló antes pero dio el error durante el tiempo de carga): Desarrollo de la aplicación Angular 4 con Bootstrap 4 y TypeScript
fuente
reinstalando rxjs -> npm install rxjs @ 6 rxjs-compat @ 6 --save
fuente
Ahora no necesitamos el módulo iónico-nativo, solo necesitamos @ ionic-native / core. correr
Resolverá su problema ...
fuente
solo agrega
a su tsconfig.json
fuente
gracias la respuesta de zmag y Rahul Sharma, ¡funciona! @zmag @Rahul Sharma
mi problema es el siguiente:
typings/globals/core-js/index.d.ts:3:14 - error TS2300: Duplicate identifier
Realice cambios como.
Vaya al archivo Package.json y modifique la siguiente configuración
fuente
Sí, el problema fue con TypeScript 2.4.1. Acabo de desinstalar esto del Panel de control y funciona para mí, ya que Visual Studio 2017 ya lo tiene.
fuente