Функция, объявленный тип которой не является ни ‘void’, ни ‘any’, должна возвращать значение Angular

#angular

#angular

Вопрос:

Я получаю эту ошибку, когда использование observable class раньше работало нормально

 
  login(userId: string, userPassword: string): Observable<User> {          >>> I am getting error here
        this.http.post(this.Url,'/'   {userId}   '/'   {userPassword})
            .pipe(map(user => {
                // store user details and jwt token in local storage to keep user logged in between page refreshes
                localStorage.setItem('currentUser', JSON.stringify(user));
                this.currentUserSubject.next(user);
                return user;
            }));
    }

  

Это интерфейс

  export interface User {
         success:string
         userId:string
         userPassword:string
         token?: string
    }
  

Комментарии:

1. Можете ли вы вставить точную ошибку / журнал?

2. Добавьте return непосредственно перед this.http.post

3. Аргумент типа ‘Object’ не может быть присвоен параметру типа ‘User’. Тип ‘Object’ может быть присвоен очень немногим другим типам. Вы имели в виду использовать вместо этого тип ‘any’? В типе ‘Object’ отсутствуют следующие свойства типа ‘User’: успех, идентификатор пользователя, пароль пользователя

4. @frunkad это не работает

5. Перед возвратом user приведите его к типу. return (user as User)

Ответ №1:

Вам не хватает return before this.http.post и использовать tap

   login(userId: string, userPassword: string): Observable<User> {     
      return this.http.post(this.Url,'/'   {userId}   '/'   {userPassword})
            .pipe(tap(user => {
                // store user details and jwt token in local storage to keep user logged in between page refreshes
                localStorage.setItem('currentUser', JSON.stringify(user));
                this.currentUserSubject.next(user);
            }));
    }
  

Ответ №2:

Два изменения

  • Пользователь с приведенным типом

  • возвращаемый наблюдаемый

     login(userId: string, userPassword: string): Observable<User> {  
          return this.http.post(this.Url,'/'   {userId}   '/'   {userPassword})
              .pipe(map(user => {
                  // store user details and jwt token in local storage to keep user logged in between page refreshes
                  localStorage.setItem('currentUser', JSON.stringify(user));
                  this.currentUserSubject.next(user);
                  return (user as User);
              }));
      }