es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Angular – El argumento de tipo null no se puede asignar al parámetro de tipo IUser

En mi proyecto de Angular-13 tengo esta interfaz de modelo:

Tipo de exportación IUser {
email: string;
token: string;
}

También tengo este servicio:

Clase de exportación AccountService {
  baseUrl = environment.apiUrl;
  private currentUserSource = new ReplaySubject<IUser>(1);
  currentUser$ = this.currentUserSource.asObservable();

constructor(private http: HttpClient, private router: Router) { }

loadCurrentUser(token: string) {
    if (token === null) {
      this.currentUserSource.next(null);
      return of(null);
    }
    let headers = new HttpHeaders();
    headers = headers.set('Authorization', `bearer ${token}`);

return this.http.get(this.baseUrl + 'account', {headers}).pipe(
  map((user: IUser) => {
    if (user) {
      localStorage.setItem('token', user.token);
      this.currentUserSource.next(user);
    }
  })
);
}
}

Sin embargo, obtengo este error:

el argumento de tipo null no se puede asignar al parámetro de tipo IUser

y null se resalta en:

this.currentUserSource.next(null);

¿Cómo puedo resolver esto?

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para resolver este error, debes asegurarte de que el argumento pasado al método next() de currentUserSource no sea nulo.

    Una posible solución es cambiar el tipo de currentUserSource a ReplaySubject<iuser |="" null=""> para que también pueda aceptar valores nulos.

    Aquí está el código actualizado:

    export class AccountService {
      baseUrl = environment.apiUrl;
      private currentUserSource = new ReplaySubject<iuser |="" null="">(1);
      currentUser$ = this.currentUserSource.asObservable();
    
      constructor(private http: HttpClient, private router: Router) { }
    
      loadCurrentUser(token: string) {
        if (token === null) {
          this.currentUserSource.next(null);
          return of(null);
        }
        let headers = new HttpHeaders();
        headers = headers.set('Authorization', `bearer ${token}`);
    
        return this.http.get(this.baseUrl + 'account', {headers}).pipe(
          map((user: IUser) => {
            if (user) {
              localStorage.setItem('token', user.token);
              this.currentUserSource.next(user);
            }
          })
        );
      }
    }
    

    Con este cambio, deberías poder pasar null a next() sin errores.

Comments are closed.