javascript - ts2322 - La propiedad ''catch'' no existe en el tipo ''Observable<any>''
type observable object>'' is not assignable to type any[]'' (2)
Con RxJS 5.5+, el operador
catch
ahora está en desuso.
Ahora debe usar el operador
catchError
junto con
pipe
.
RxJS v5.5.2 es la versión de dependencia predeterminada para Angular 5.
Para cada operador RxJS que importe, incluido
catchError
, ahora debe importarlo desde ''rxjs / operadores'' y usar el operador de tubería.
Ejemplo de error de captura para una solicitud Http Observable
import { Observable } from ''rxjs'';
import { catchError } from ''rxjs/operators'';
...
export class ExampleClass {
constructor(private http: HttpClient) {
this.http.request(method, url, options).pipe(
catchError((err: HttpErrorResponse) => {
...
}
)
}
...
}
Observe aquí que
catch
se reemplaza por
catchError
y el operador de
pipe
se usa para componer los operadores de manera similar a lo que está acostumbrado con el encadenamiento de puntos.
Consulte la documentación de pipable sobre pipable (anteriormente conocidos como lettable ) para obtener más información.
En la página de documentación de Angular 2 para usar el servicio Http, hay un ejemplo.
getHeroes (): Observable<Stuff[]> {
return this.http.get(this.url)
.map(this.extractData)
.catch(this.handleError);
}
angular2-webpack-starter el proyecto angular2-webpack-starter y agregué el código anterior.
Observable
usando
import {Observable} from ''rxjs/Observable'';
Supongo que las propiedades
Observable
se importan (
.map
funciona).
Miró el registro de cambios para rxjs.beta-6 y no se menciona nada sobre
catch
.
Sí, debe importar el operador:
import ''rxjs/add/operator/catch'';
O importe
Observable
esta manera:
import {Observable} from ''rxjs/Rx'';
Pero en este caso, importa todos los operadores.
Vea esta pregunta para más detalles: