Angular - null 类型的参数不能分配给 IUser 类型的参数
Angular - argument of type null is not assignable to parameter of type IUser
在我的 Angular-13 项目中,我有这个模型界面:
export interface IUser {
email: string;
token: string;
}
还有这项服务:
export class 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);
}
})
);
}
}
但是,我得到了这个错误:
argument of type null is not assignable to parameter of type IUser
null 突出显示在:
this.currentUserSource.next(null);
我如何获得这个决心?
谢谢
ReplaySubject
.next() 预期接收具有 T
值的参数。
next(value: T): void
Parameters
value Type: T.
Returns
无效
哪个 T
是 IUser
基于以下陈述:
private currentUserSource = new ReplaySubject<IUser>(1);
解决方案
您可以通过将 currentUserSource
声明为 ReplaySubject<IUser | null>
类型来解决它。
private currentUserSource = new ReplaySubject<IUser | null>(1);
在我的 Angular-13 项目中,我有这个模型界面:
export interface IUser {
email: string;
token: string;
}
还有这项服务:
export class 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);
}
})
);
}
}
但是,我得到了这个错误:
argument of type null is not assignable to parameter of type IUser
null 突出显示在:
this.currentUserSource.next(null);
我如何获得这个决心?
谢谢
ReplaySubject
.next() 预期接收具有 T
值的参数。
next(value: T): void
Parameters
value Type: T.
Returns 无效
哪个 T
是 IUser
基于以下陈述:
private currentUserSource = new ReplaySubject<IUser>(1);
解决方案
您可以通过将 currentUserSource
声明为 ReplaySubject<IUser | null>
类型来解决它。
private currentUserSource = new ReplaySubject<IUser | null>(1);