在我的 Angular-12 应用程序中,我有这个模型接口:
export interface ISiteInfo {
id: number;
name: string;
email: string;
}
And also this service:
import {ISiteInfo} from '../models/site-info.model';
export class SiteInfoService {
private infoSiteSource = new BehaviorSubject < ISiteInfo | null > (null);
infoSite = this.infoSiteSource.asObservable();
setInfoSite(data: ISiteInfo) {
this.infoSiteSource.next(data);
}
constructor(
private http: HttpClient,
private api: ApiService,
) {}
public get(refresh: boolean = false): Observable < ISiteInfo > {
return new Observable(observer => {
if (!refresh && this.infoSiteSource.getValue()) {
observer.next(this.infoSiteSource.getValue());
return observer.complete();
}
this.http.get < ISiteInfo > (this.api.baseURL + '/GInfoSite').subscribe(value => {
this.setInfoSite(value);
observer.next(this.infoSiteSource.getValue());
observer.complete();
});
});
}
}
我收到此错误:
<块引用>'ISiteInfo 类型的参数 | null' 不可分配给类型为 'ISiteInfo | 的参数不明确的'。 类型 'null' 不能分配给类型 'ISiteInfo |未定义'.ts(2345)
这一行突出显示:
<块引用>this.infoSiteSource.getValue()
在
<块引用>observer.next(this.infoSiteSource.getValue());
此外,当我从以下位置删除 |null 时:
<块引用>private infoSiteSource = new BehaviorSubject(null);
错误改为:
<块引用>“null”类型的参数不可分配给“ISiteInfo”类型的参数.ts(2345)
我该如何解决这个问题?
谢谢
答案 0 :(得分:0)
如果你试试这个,它会改变什么吗:
private infoSiteSource = new BehaviorSubject < ISiteInfo | undefined > (undefined);
此外,您的 get
方法似乎支持刷新选项。我经常使用另一个 Observable 完成刷新功能,如下所示:
// To support a refresh feature
private refresh = new BehaviorSubject<boolean>(true);
products$ = this.refresh
.pipe(
mergeMap(() => this.http.get<Product[]>(this.productsUrl)
.pipe(
tap(data => console.log('Products', JSON.stringify(data))),
catchError(this.handleError)
)
));
(对于毫无疑问会编辑这篇文章的人......希望你能得到很多 SO 点来编辑这个“希望这会有所帮助”!)