type ts2415 property not node_modules incorrectly incompatible error assignable are typescript angular observable rxjs

typescript - ts2415 - rxjs observable angular 6



crear Observable<T> desde el resultado (2)

Estoy intentando Angular2.

Noté que el servicio http usa un objeto Observable lugar de Promise (no me gusta mucho esa opción ... async / await están llegando).

En mi servicio, descargo una lista de Plants del servicio web. Al hacer clic en una planta, muestro los detalles utilizando la ruta. Pero de esta manera, cuando vuelvo, las plantas se vuelven a descargar (porque se vuelve a llamar al constructor).

Para evitar esto quiero hacer algo como:

public getPlants(): Observable<Plants[]> { if (this._plants != null) return Observable.fromResult (this._plants); //This method does not exists return this._http.get(''../../res/heroes.json'')... }

¿Hay una manera de hacerlo? ¿Cómo puedo importar la clase Observable en mi archivo ts?

¡Gracias!


El método en TypeScript (o JavaScript para esa materia) se llama of . Learn rxjs tiene un buen tutorial también

Si estás usando rxjs6 obtienes todo desde rxjs

import { Observable, of } from ''rxjs''; public getPlants(): Observable<Plant[]> { const mocked: Plant[] = [ { id: 1, image: ''hello.png'' } ]; // returns an Observable that emits one value, mocked; which in this case is an array, // and then a complete notification // You can easily just add more arguments to emit a list of values instead return of(mocked); }

En la versión anterior importó el operador desde una ubicación diferente

import { Observable } from ''rxjs/Observable''; import { of } from ''rxjs/observable/of''; public getPlants(): Observable<Plant[]> { const mocked: Plant[] = [ { id: 1, image: ''hello.png'' } ]; return of(mocked); }

Y antes de eso lo importó como una extensión para la clase Observable

import { Observable } from "rxjs/Observable"; import ''rxjs/add/observable/of''; public getPlants(): Observable<Plants[]> { // this can be changed to a member variable of course let mocked: Plants[] = [{ id: 1, image: "hello.png" }]; return Observable.of(mocked); }


Esta es mi solución de trabajo:

if (this._heroes != null && this._heroes !== undefined) { return Observable.create(observer => { observer.next(this._heroes); observer.complete(); }); }

Espero que esta sea la mejor solución.