Свойство Typescript Error 'members' не существует для типа '{}' - PullRequest
0 голосов
/ 09 ноября 2018

Этот фрагмент кода работал хорошо до тех пор, пока несколько дней назад я не обновил angularfire и firebase: с "angularfire2": "5.0.0-rc.4", до "angularfire2": "^5.1.0", с "firebase": "4.8.0", до "firebase": "^5.5.7":

this.dataProvider.getGroup(this.groupId).snapshotChanges().subscribe((group) => {
  this.group = group.payload.val();
  this.groupMembers = null;
  // Get group members
  if (group.payload.val().members) {
    group.payload.val().members.forEach((memberId) => {
      this.dataProvider.getUser(memberId).snapshotChanges().subscribe((member) => {
        this.addOrUpdateMember(member);
      });
    });
    // Get user's contacts to add
    this.dataProvider.getCurrentUser().snapshotChanges().subscribe((account) => {
      if (account.payload.val().contacts) {

        //Delete log
        console.log('My contacts',account.payload.val().contacts);
        for (var i = 0; i < account.payload.val().contacts.length; i++) {
          this.dataProvider.getUser(account.payload.val().contacts[i]).snapshotChanges().subscribe((contact) => {
            // Only contacts that are not yet a member of this group can be added.

              contact = { $key: contact.key, ...contact.payload.val()};
              //Delete log
              console.log('Is contact',contact,' already added?',this.isMember(contact));
            if (!this.isMember(contact))
              this.addOrUpdateContact(contact);
          });
        }
        if (!this.contacts) {
          this.contacts = [];
        }
      } else {
        this.contacts = [];
      }
    });
  }
  this.loadingProvider.hide();
});

Это getGroup() в провайдере:

getGroup(groupId) {
    return this.angularfire.object('/groups/' + groupId);
}

Эта ошибка возникает везде, где есть payload.val().someProperty в проекте.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вот что мне нужно было сделать, чтобы это заработало:

this.dataProvider.getGroup(this.groupId).snapshotChanges().subscribe((group) => {
  let data: any = group.payload.val();
  if (data.members) {   
      /* do something */
  }

Так что, видимо, мне пришлось включить : any. Опять же, учитывая, что это работало до того, как я сделал обновление - эксперты расскажут нам больше о причине.

0 голосов
/ 09 ноября 2018

Вот как я получаю данные из firebase.

firebase.database().ref('/MyCustomFolder').once("value").then(snapshot => {
  let data = snapshot.val();
  console.log(data.customers);
});

Я предлагаю попробовать следующее:

this.dataProvider.getGroup(this.groupId).snapshotChanges().subscribe((group) => {
  let data = group.val();
  let payload = data.payload;
  if (payload.members) {   
      /* do something */
  }
...