簡體   English   中英

Angular2項目中的TSLint錯誤:無法將類型&#39;Subscription&#39;分配給類型&#39;FirebaseListObservable <any[]> “

[英]TSLint errors in Angular2 project: Type 'Subscription' is not assignable to type 'FirebaseListObservable<any[]>'

遇到這個問題,無法解決...

以下是相關代碼:

export class AdminComponent {
  items: FirebaseListObservable < any[] > ;
  private xyz: string;
  private fbList: FirebaseListObservable < any[] > ;
  private userData: object[];
  private userEid: object[];
  private userFullName: object[];
  private uniqueID: string;
  private quizAnswerA: string;

  private userList = [];
  private userAnswer1: any;

  constructor(db: AngularFireDatabase, private router: Router, private route: ActivatedRoute) {
    this.fbList = db.list('/');

    this.items = this.fbList.map(items => {
      const dbAnalytics = items[0];
      const dbBookings = items[1];
      const dbClasses = items[2];
      const dbLabs = items[3];
      const dbMachines = items[4];
      const dbPostLabs = items[5];
      const dbPreLabs = items[6];
      const dbUsers = items[7];

      for (const key of Object.keys(dbUsers)) {
        if (dbUsers.hasOwnProperty(key)) {
          this.userData = dbUsers[key];
          this.uniqueID = key;
          this.userEid = this.userData['eid'] !== undefined ? this.userData['eid'] : 'N/A';
          this.userFullName = this.userData['name'];

        }
        let time = 'N/A';
        let count = 0;
        let runs = dbAnalytics['expRuns'];
        if ((key in runs)) {
          let experiments = runs[key]['-KVQN-Qk-CLh_KupgKTt'];
          count = Object.keys(experiments)
            .length;
          try {
            time = experiments[Object.keys(experiments)[Object.keys(experiments)
              .length - 1]]['time'].replace('T', '  ')
              .split('.')[0];
          } catch (e) {}

        }

        let firstQuizAnswer = dbPostLabs['-KVQN-Qk-CLh_KupgKTt']['a']['completed'];
        let secondQuizAnswer = dbPostLabs['-KVQN-Qk-CLh_KupgKTt']['b']['completed'];
        let thirdQuizAnswer = dbPostLabs['-KVQN-Qk-CLh_KupgKTt']['c']['completed'];
        let fourthQuizAnswer = dbPostLabs['-KVQN-Qk-CLh_KupgKTt']['d']['completed'];

        let store = new Row(this.userFullName, this.userEid, this.uniqueID, count, time, firstQuizAnswer[key], secondQuizAnswer[key], thirdQuizAnswer[key], fourthQuizAnswer[key]);
        this.userList.push(store);
      }
    }
    );
  }

}

錯誤:

TS2322:無法將類型“訂閱”分配給類型“ FirebaseListObservable”。 “訂閱”類型中缺少屬性“ $ ref”。

我該如何解決? 我是Firebase和angular2的新手。 所有建議表示贊賞。

我嘗試使用此(類似)問題,但無濟於事。

使用HttpClient而不是Http,不能將類型'Subscription'分配給類型'Observable <SearchResult []>'Angular 5

謝謝!

因此,在您執行stackBlitz之后,我相信我已經找到了您的問題,但不知道最后的數據如何,我可以告訴您發生了什么。 首先,我建議使用服務將您的邏輯(如stackBlitz示例中)分開。

首先,不管您是否將fbList都設置為Observable而不是FireBaseObservableList,我相信無論如何它都已被棄用。 我也將項目也設置為空類型的數組(再次,我也不知道最終結果是什么樣的),但是無論如何我都沒有使用angular | 異步管道),然后將.ValueChanges()添加到fbList使其可觀察。

另外,如果您知道數據的外觀並希望使用map,則可以將項聲明為數據的類型,然后,如果您要使用map運算符,請先從rxjs / operators將該數據導入angular並記住必須使用.pipe(map())首先。 查看該示例,並在不首先進行其他所有操作的情況下進行嘗試,以查看其工作原理。 如果您需要有關模型的更多指導,請更新數據樣本。

https://angular-rt-database-dmw7gd.stackblitz.io

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM