【问题标题】:Typescript Error Property 'members' does not exist on type '{}'类型“{}”上不存在 Typescript 错误属性“成员”
【发布时间】:2019-04-12 18:59:07
【问题描述】:

这段代码一直运行良好,直到几天前我升级了 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 的任何地方都会出现此错误。

【问题讨论】:

    标签: typescript firebase ionic3 angularfire2 angularfire


    【解决方案1】:

    这是我从 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 */
      }
    

    【讨论】:

    • 感谢@Dmitry 的回复。但是如果我改变然后我得到一个新的错误:Typescript错误属性'members'在类型'DatabaseSnapshot '上不存在。类型“DatabaseSnapshotExists”上不存在属性“members”。
    • @PaulKitatta 我想我做错了。我编辑了我的答案
    • 它给出了新的错误:Property 'val' does not exist on type 'AngularFireAction&lt;DatabaseSnapshot&lt;{}&gt;&gt;'.。但我找到了解决方案。
    【解决方案2】:

    这是我必须做的才能让它工作:

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

    显然我必须包含: any。同样,鉴于在我进行升级之前它正在工作 - 专家会告诉我们更多原因。

    【讨论】:

      猜你喜欢
      • 2023-02-21
      • 2020-07-09
      • 2019-10-20
      • 2021-09-26
      • 2021-09-06
      • 2016-09-07
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多