Estoy creando una aplicación ionic 2 usando mecanografiado y después de actualizar la instalación de mecanografiado local a la versión 2.2.1 desde la versión 2.1.0 , comencé a recibir este error:
El tipo '() => Observable' no se puede asignar al tipo '() => Observable'. Existen dos tipos diferentes con este nombre, pero no están relacionados. El tipo 'Observable' no se puede asignar al tipo 'Observable'. Existen dos tipos diferentes con este nombre, pero no están relacionados.
Este error se repite para cada una de las siguientes líneas
L28: this.onDisconnect = Network.onDisconnect L29: this.onchange = Network.onchange L30: this.ontypechange = Network.ontypechange Network es una clase importada de ionic-native , sus onDisconnect , onchange y ontypechange se definen de la siguiente manera:
static onDisconnect(): Observable<any>; static onchange(): Observable<any>; static ontypechange(): Observable<any>; Tengo onDisconnect , onchange y ontypechange como propiedades public de una clase personalizada ( clase @Injectable() ) llamada "Network" y las he definido de la siguiente manera:
L15: public onDisconnect: ()=>Observable<any> L16: public ontypechange: ()=>Observable<any> L17: public onchange: ()=>Observable<any>tengo tres preguntas?
Primero: ¿Alguien me ayudaría a entender qué significa realmente el error en TypeScript y por qué ocurre como tal en mi código?
Segundo: Si bien sé que podría extender la clase, no quiero hacerlo. Entonces pregunto, ¿la diferencia en declarar mis métodos como public mientras que los de la clase son static causa este problema?
Tercero: ¿cuál es la diferencia entre estos dos tipos de definición de una propiedad en una clase?
EDITAR:
Me acabo de dar cuenta de que anteriormente había intentado extender la clase Network y esto falló debido a la declaración estática
Tiene dos versiones diferentes de rxjs al acecho en su árbol node_modules , y TS no sabe que son "iguales".
Lo primero que debe intentar sería borrar todo el directorio node_modules , vaciar la caché de npm y rehacer npm install .
Si eso no resuelve el problema, es probable que el problema subyacente sea que diferentes dependencias han especificado versiones de rxjs que son incompatibles, lo que obliga a npm a traer una versión separada de rxjs para uno o más de ellos (que colocará en node_modules directorio bajo algún módulo). Verá una estructura como
node_modules dependencyA rxjs dependencyB node_modules rxjs Si esto es lo que está sucediendo, entonces no tendrá más opción que rastrear el requisito de la versión infractora. Por ejemplo, el package.json de nivel superior.json puede tener rxjs: "^5.2.0" , mientras que dependencyB/package.json puede tener rxjs: "5.0.0" .
Esto funcionó para mí:
Cambiando la import { Observable } de rxjs/observable a la import { Observable } de rxjs ;
Estaba recibiendo un error similar como resultado de la incompatibilidad entre RxJS y Ngrx v7 en una versión determinada. La degradación de RxJS a ~ 6.4.0 ayudó. yarn add rxjs@~6.4.0 funcionó para mí y se resolvió el error.