Typescript 错误 属性 'members' 在类型“{}”上不存在
Typescript Error Property 'members' does not exist on type '{}'
这段代码一直运行良好,直到几天前我升级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
的地方都会出现此错误。
这是我从 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 */
}
这是我必须做的才能让它工作:
this.dataProvider.getGroup(this.groupId).snapshotChanges().subscribe((group) => {
let data: any = group.payload.val();
if (data.members) {
/* do something */
}
所以显然我必须包括 : any
。同样,考虑到在我进行升级之前这是有效的 - 专家会告诉我们更多原因。
这段代码一直运行良好,直到几天前我升级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
的地方都会出现此错误。
这是我从 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 */
}
这是我必须做的才能让它工作:
this.dataProvider.getGroup(this.groupId).snapshotChanges().subscribe((group) => {
let data: any = group.payload.val();
if (data.members) {
/* do something */
}
所以显然我必须包括 : any
。同样,考虑到在我进行升级之前这是有效的 - 专家会告诉我们更多原因。