我正在尝试为Firebase编写打字稿云功能。即使我检查change.after是否存在here所提到的内容,我仍然会得到对象可能未定义的错误。
这是我的代码:
export const toDashboardInfo = functions.firestore.document('maps/{mapId}').onWrite((change, context) => {
let userId;
if(change.after){
const after=change.after.data();
userId=after.ownerId;
}
我在做什么错?谢谢!
答案 0 :(得分:4)
如前所述,您正在检查change.after
是否存在。完成后,您将在其上调用一个名为data()
的方法,该方法可以返回FirebaseFirestore.DocumentData
或undefined
。这意味着变量after
可以是这些类型中的任何一种,因为data()
方法的结果可能返回了undefined
。
您还应该在访问typeof after !== 'undefined'
的属性之前对其进行检查。
export const toDashboardInfo = functions.firestore.document('maps/{mapId}').onWrite((change, context) => {
let userId;
if (change.after) {
// change after exists
const after = change.after.data();
// after can be undefined as data() could return undefined
if (typeof after !== 'undefined') {
userId = after.ownerId; // it's safe to access ownerId
}
}
}
此外,如果您使用的是打字稿v3.7及更高版本,则可以使用Optional chaining。该代码将类似于:
export const toDashboardInfo = functions.firestore.document('maps/{mapId}').onWrite((change, context) => {
const after = change.after?.data();
const userId = after?.ownerId || 'default value';
}
如果没有数据或返回|| 'default value'
时userId
可以为undefined
,则可以跳过ownerId
部分。