0

入れ子になったデータを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$;
  }
}

私がやろうとしているのは、すべてのサブジェクトとクラスを含むすべてのスタディをオブザーバブルとして取得して、1 つのコンポーネントですべてのレベルを表示および編集できるようにすることです。

次のようなエラーが表示されます。

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 への割り当てエラーがあることを強調しています。

私は何を間違っていますか?

4

1 に答える 1

0

FirebaseListObservable は、Observable とは異なるタイプです。変更してみてください:

 getMyStudies(): Observable<IStudy[]> {
    return this.myStudies$;
  }

getMyStudies(): FirebaseListObservable <IStudy[]> {
    return this.myStudies$;
}

編集:オブザーバブルのこのような深いネスト呼び出しは避けるべきだと思いますが、一見すると、ここにバグがあります:

に割り当てFirebaseListObservableてい subject.classesます。

于 2016-09-07T07:22:29.587 に答える