Тип "Observable <boolean>" не может быть назначен типу "Observable <UserRegistration>" - PullRequest
0 голосов
/ 20 декабря 2018
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 голосов
/ 20 декабря 2018

ваш тип возвращаемого значения Observable<UserRegistration>, но вы возвращаете boolean, вы должны либо изменить тип возвращаемого значения на Observable<boolean>, либо вернуть объект типа Observable<UserRegisteration>

Добро пожаловать в Stackoverflow :)

0 голосов
/ 20 декабря 2018

Ошибка довольно очевидна.Вы сказали Typescript, что ожидаете от метода, чтобы он возвращал наблюдение UserRegistration во время отображения и вернул свой результат в Boolean в этой строке кода:

.map(res => true)

В соответствии с вашим кодом - если естьошибка не будет выдана из запроса http, затем отобразите результат в значение «true» и верните его.

Просто измените значение с первой строки с Observable<UserRegistration> на Observable<boolean>

0 голосов
/ 20 декабря 2018

Добро пожаловать в 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)
);
0 голосов
/ 20 декабря 2018

если вы возвращаетесь с объектом 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);
  }
0 голосов
/ 20 декабря 2018

Как показывает ваш метод, вы возвращаете логическое значение true, в то время как в вашем определении говорится, что оно должно возвращать Observable<UserRegistration>.Измените тип возвращаемого вами метода на,

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

Однако ваша логика, похоже, не верна, так как всегда будет возвращать true.

...