Angular: El argumento de tipo ‘OperatorFunction‘ no se puede asignar a un parámetro de tipo ‘OperatorFunction
Al intentar crear una característica de inicio de sesión de usuario en Angular-13, tengo este modelo:
export interface IUser {
email: string;
token: string;
}
Servicio:
export class AccountService {
baseUrl = environment.apiUrl;
private currentUserSource = new ReplaySubject<iuser>(1);
currentUser$ = this.currentUserSource.asObservable();
constructor(private http: HttpClient, private router: Router) { }
login(values: any) {
return this.http.post(this.baseUrl + 'account/login', values).pipe(
map((user: IUser) => {
if (user) {
localStorage.setItem('token', user.token);
this.currentUserSource.next(user);
}
})
);
}
}
Obtuve este error al intentar implementarlo:
El argumento de tipo ‘OperatorFunction<iuser, void=””>’ no es assignable al parámetro de tipo ‘OperatorFunction<object, void=””>’
Esto está resaltado:
map((user: IUser) => {
¿Cómo resuelvo esto?
Gracias.</object,></iuser,>
davy.ai
El mensaje de error sugiere que el operador
map
en la funciónlogin
espera un tipo deOperatorFunction<object, void="">
, pero en cambio está recibiendoOperatorFunction<iuser, void="">
como argumento.Para resolver este problema, puedes especificar el tipo de retorno esperado para el operador
map
utilizando el operadorpipe
para encadenar una llamadamap
con la conversión de tipo correcta de la siguiente manera:Este enfoque convierte la respuesta de la solicitud HTTP al modelo
IUser
y luego lo asigna a la variableuser
, que se puede usar más adelante en la función. Esto debería resolver el error de tipo que estabas experimentando.</iuser,></object,>