我尝试从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的错误。
我做错了什么?
答案 0 :(得分:0)
FirebaseListObservable是与Observable不同的类型。尝试更改:
getMyStudies(): Observable<IStudy[]> {
return this.myStudies$;
}
到
getMyStudies(): FirebaseListObservable <IStudy[]> {
return this.myStudies$;
}
编辑:我认为你应该避免对可观察者进行如此深层次的嵌套调用,但是乍一看你有一个错误:
您要将FirebaseListObservable
分配给subject.classes
。