Angular 6 - Rxjs 6 - 类型 Observable<Object> 不可分配给类型 Observable<Item>

标签 angular rxjs observable

将我的 Angular 项目从版本 5 更新到版本 6 后出现此错误:

Type Observable'<'Object> is not assignable to type Observable'<'Todo>.

在我的 todo.service.ts 中

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { environment } from '../../../environments/environment';
import { Todo } from '../../../models/Todo';
import { Observable, of } from 'rxjs';
import { catchError } from 'rxjs/operators';
import 'rxjs/add/observable/throw';

@Injectable()
export class TodoService {

  todos: Todo[];

  constructor( private httpClient: HttpClient ) { }

  loadTodos(): Observable<Todo[]> {
    return this.httpClient.get<Todo[]>(`${environment.api}${environment.path}`).pipe(
      catchError((error: any) => Observable.throw(error))
    );
  }

  addTodo(todo: Todo): Observable<Todo> {
    return this.httpClient.post(`${environment.api}${environment.path}`, JSON.stringify(todo)).pipe(
      catchError((error: any) => Observable.throw(error))
    );
  }

  editTodo(todo: Todo): Observable<Todo> {
    return this.httpClient.put(`${environment.api}${environment.path}/${todo.id}`, JSON.stringify(todo)).pipe(
      catchError((error: any) => Observable.throw(error))
    );
  }

  deleteTodo(todo: Todo): Observable<Todo> {
    return this.httpClient.delete(`${environment.api}${environment.path}/${todo.id}`).pipe(
      catchError((error: any) => Observable.throw(error))
    );
  }
}

错误指向 addTodo、editTodo 和 deleteTodo 方法,loadTodo 没有问题,因为它将 Observable'<'Object> 类型分配给 Observable'<'Array> 类型。 我用了this link更改 rxjs 元素的导入方式,但没有成功。有什么帮助吗?

最佳答案

httpClient 方法是通用的,您必须键入响应,例如:

    addTodo(todo: Todo): Observable<Todo> {
        return this.httpClient.post(`${environment.api}${environment.path}`, JSON.stringify(todo)).pipe(
      catchError((error: any) => Observable.throw(error))
    );
  }

必须这样使用:

    addTodo(todo: Todo): Observable<Todo> {
    return this.httpClient.post<Todo>(`${environment.api}${environment.path}`, JSON.stringify(todo)).pipe(
      catchError((error: any) => Observable.throw(error))
    );
  }

关于Angular 6 - Rxjs 6 - 类型 Observable<Object> 不可分配给类型 Observable<Item>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50492977/

相关文章:

javascript - 使用 Angular Observable 满足异步分支和同步分支

java - rxjava中如何不断地将数据流式传输到客户端?

javascript - 如何根据下拉选择填充文本值类型的输入 - Angular 5

Angular2 从包装的 Html.get 返回 Observable<Response>

reactive-programming - 是否有更符合逻辑的方法来通过某些谓词拆分流?

dart - 我可以在没有聚合物的Dart中观察变量吗?

angular - 比较 Observable 的前一个值和 Angular 中的下一个值

asp.net-mvc - 将 JQuery AJAX 调用转换为 Angular 2 服务

angular - 如何导入highcharts-more

angular - AppModule 的 NgModule.imports 中位置 5 的值不是引用(构建错误 Angular2)