我尝试从 firebase 检索嵌套数据并保持其类型安全。我看过这个: https ://github.com/aaronksaunders/afwithngcli/blob/master/src/app/afwithngcli.component.ts 但它不使用接口。
我的界面(针对此示例进行了简化):
export interface IStudy {
$key?: string;
description: string;
subjects: ISubject[];
}
export interface ISubject {
$key?: string;
description: string;
someOtherData: string;
classes: IClass[];
}
export interface IClass {
$key?: string;
description: string;
someOtherData: string;
}
我的服务:
@Injectable()
export class MyService {
private myStudies$: FirebaseListObservable<IStudy[]>;
constructor(af: AngularFire, auth: AuthService) {
this.myStudies$ = af.database.list(`/studies/${auth.id}`).map((studies: IStudy[]) => {
return studies.map(study => {
study.subjects = af.database.list(`/subjects/${study.$key}`).map((subjects: Subject[]) => {
return subjects.map(subject => {
subject.classes = af.database.list(`/classes/${subject.$key}`);
return subject;
})
});
return study;
})
})
}
getMyStudies(): Observable<IStudy[]> {
return this.myStudies$;
}
}
我尝试做的是将我所有的研究(包括所有科目和课程)作为可观察的,以便我可以在一个组件中显示和编辑所有级别。
我收到错误消息:
Type 'Observable<IStudy[]>' is not assignable to type 'FirebaseListObservable<IStudy[]>'.
Property '_ref' is missing in type 'Observable<IStudy[]>'.
Type 'Observable<ISubject[]>' is not assignable to type 'ISubject[]'.
Property 'length' is missing in type 'Observable<ISubject[]>'.
Type 'FirebaseListObservable<any[]>' is not assignable to type 'IClass[]'.
Property 'length' is missing in type 'FirebaseListObservable<any[]>'.
问题出在构造函数中,错误突出显示分配给 this.myStudies$、study.subjects 和 subject.classes 的错误。
我究竟做错了什么?