我正在尝试使用 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
}
如何从父对象获取子对象?
我尝试遍历优惠券快照并将子值附加到优惠券变量,但出现错误。
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 '{}'.
有人可以帮助我吗?
你已经告诉 TypeScript 你想强类型将 coupon 作为一个空对象,并且只是一个空对象。 稍后,您告诉它访问空对象中不存在的对象email
的属性。 这就是您出现错误的原因:Property 'email' does not exist on type '{}'.
您根本不应该提供任何键入提示。 只需let email;
,无需默认赋值,如果您希望它属于 any
类型,这使您可以访问对象的任意属性。 当然,您可能还需要在进入它之前检查它是否已定义,因为这也是一个错误。