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

时间:2018-12-20 17:09:00

标签: angular typescript angular-http angular-httpclient angular-observable

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'.

它也使用此类:

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

5 个答案:

答案 0 :(得分:2)

错误非常明显。您告诉Typescript,您希望在映射并在以下代码行中将结果返回到UserRegistration时,该方法返回Boolean的观测值:

.map(res => true)

根据您的代码-如果http请求不会引发错误,则将结果映射到“ true”并返回。

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

答案 1 :(得分:1)

如您的方法所示,您将返回一个布尔值true,而您的定义说它应该返回 Observable<UserRegistration> 。将方法的返回类型更改为

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

但是您的逻辑似乎不正确,因为它总是会返回true。

答案 2 :(得分:1)

欢迎来到stackoverflow!

您的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)
);

答案 3 :(得分:1)

如果返回的是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);
  }

答案 4 :(得分:0)

您的返回类型为Observable<UserRegistration>,但您返回的是boolean 您应该将返回类型更改为Observable<boolean>或返回类型为Observable<UserRegisteration>的对象

欢迎使用Stackoverflow:)