类型 'Observable<boolean>' 不可分配给类型 'Observable<UserRegistration>'

Type 'Observable<boolean>' is not assignable to type 'Observable<UserRegistration>'

register(email: string, password: string, firstName: string, lastName: string,location: string): Observable<UserRegistration> {
    let body = JSON.stringify({ email, password, firstName, lastName,location });
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    return this.http.post(this.baseUrl + "/accounts", body, options)
      .map(res => true)
      .catch(this.handleError);
  }

我在网上找到了这段代码,我正试图在我自己的项目中实现它,但我不断收到以下错误:

Type 'Observable<boolean>' is not assignable to type 'Observable<UserRegistration>'.
  Type 'boolean' is not assignable to type 'UserRegistration'.

它也使用这个 class:

export interface UserRegistration {
  email: string;
  password: string;
  firstName: string;
  lastName:  string;
  location: string;
}

如您的方法所示,您 return 为布尔值 true,而您的定义表明它应该 return Observable<UserRegistration>。将您的方法 return 类型更改为

register(email: string, password: string, firstName: string, lastName: string,location: string): Observable<boolean>

但是您的逻辑似乎并不正确,因为它总是 return 正确。

欢迎使用 Whosebug!

您的 map 语句返回 true:

return this.http.post(this.baseUrl + "/accounts", body, options)
  .map(res => true)
  .catch(this.handleError);

我假设您真的想要返回可观察对象。如果是这样,你不需要映射它。

您使用的 Angular 和 RxJS 是什么版本?

如果您使用的是 Angular (v7) 的当前版本,那么它应该如下所示:

return this.http.post(this.baseUrl + "/accounts", body, options).pipe(
  catchError(this.handleError)
);

如果您要返回 UserRegistration 对象,请使用以下代码。 我改动很小

register(email: string, password: string, firstName: string, lastName: string,location: string): Observable<UserRegistration> {
    let body = JSON.stringify({ email, password, firstName, lastName,location });
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    return this.http.post(this.baseUrl + "/accounts", body, options)  
      .catch(this.handleError);
  }

错误很明显。你告诉打字稿你期望从方法 return 观察 UserRegistration 当你在这行代码映射和 returned 你的结果到 Boolean 时:

.map(res => true)

根据您的代码 - 如果 http 请求不会抛出错误,则将结果映射到 "true" 和 return。

只需将第一行的值从 Observable<UserRegistration> 更改为 Observable<boolean>

您的 return 类型是 Observable<UserRegistration> 但您正在 returning boolean 您应该将 return 类型更改为 Observable<boolean> 或 return 类型为 Observable<UserRegisteration>

的对象

欢迎使用 Whosebug:)