我正在尝试使用Firebase的管理SDK获取第一个匹配子项的对象。到目前为止,我已经能够在父对象中获取一个对象:
{ -LVOBaJXoai9n1mYrs3F: { created: 1546610959716, displayEnterpriseNumber: "BE 0479.312.137", email: "anthony.magnus@gmail.com", enterpriseNumber: "479312137" } }
但我想要
{ created: 1546610959716, email: "john.doe@gmail.com", token: '51234', isActive: true }
代码
在firebase函数中,我有以下代码:
try {
const token = req.body.token;
const couponSnapshot = await admin.database().ref(`coupons`).orderByChild('token').equalTo(token).limitToFirst(1).once('value');
const coupon = couponSnapshot.val();
console.log(coupon) //{-LVOBaJXoai9n1mYrs3F: {…}} Object in Object...
} catch(error) {
//error handling
}
如何从父对象获取子对象?
我试图循环遍历couponSnapshot并将子值附加到coupon变量,但出现错误。
const couponSnapshot = await admin.database().ref(`coupons`).orderByChild('token').equalTo(token).limitToFirst(1).once('value');
let coupon = {};
couponSnapshot.forEach(childSnapshot => {
coupon = childSnapshot.val();
});
console.log(coupon.email);
错误:
error TS2345: Argument of type '(childSnapshot: DataSnapshot) => void' is not assignable to parameter of type '(
a: DataSnapshot) => boolean'.
Type 'void' is not assignable to type 'boolean'.
Property 'email' does not exist on type '{}'.
有人可以帮我吗?
答案 0 :(得分:2)
您已经告诉TypeScript,您希望强类型键入coupon为一个空对象,并且只能是一个空对象。您稍后将告诉它访问对象email
上的属性,该属性在空对象中不存在。这就是为什么您要提出错误:Property 'email' does not exist on type '{}'.
您根本不应提供任何键入提示。如果您希望let email;
的类型为any
,则只需简单地设置@Override
public Collection<Sale> selectSales(String map) {
HashSet<Sale> sales = new HashSet();
for (Sale sale : salesList) {
if (sale.getMap().equals(map)) {
sales.add(sale);
}
}
return sales;
}
,它可以访问对象上的任意属性。当然,您可能还需要先检查是否已定义它,因为这同样会出错。