Ошибки TSLint в проекте Angular2: тип «Подписка» не может быть назначен типу «FirebaseListObservable»' - PullRequest
0 голосов
/ 23 октября 2018

Имея эту проблему, не могу понять ...

Вот соответствующий код:

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.Все предложения приветствуются.

Я пытался использовать этот (похожий) вопрос, но безрезультатно.

Тип «Подписка» нельзя назначить типу «Наблюдаемый»Angular 5 с использованием HttpClient вместо Http

Спасибо!

1 Ответ

0 голосов
/ 23 октября 2018

Итак, следуя вашему стеку, я думаю, что нашел вашу проблему, не зная, как будут выглядеть данные в конце, я могу рассказать вам, что происходит.Прежде всего, я предлагаю разделить вашу логику, как в примере stackBlitz, с сервисом.

Делаете ли вы fbList в Observable, а не в FireBaseObservableList, вы делаете это или нет, но я считаю, что в любом случае это устарело.Я также сделал элементы как пустой массив типа any (опять же, я не знаю, как вы хотите, чтобы конечный результат выглядел), но в любом случае я не использовал angular |асинхронный канал) и добавьте .ValueChanges () к списку fbList, чтобы сделать его наблюдаемым.

В качестве альтернативы, если вы знаете, как будут выглядеть ваши данные и хотите использовать карту, вы можете объявить элементы как их тип, а затем, если хотите использовать оператор карты, сначала импортируйте их в angular из rxjs /операторы и помните, что вы должны использовать .pipe (map ()) в первую очередь.Посмотрите на пример и попробуйте его, не выполняя все остальное сначала, чтобы увидеть, как он работаетЕсли вам нужно больше указаний по модели, обновите образец данных.

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

...