尝试部署 FCM 功能时获取对象可能 'undefined'

Getting Object is possibly 'undefined' when trying to deploy FCM function

我正在尝试使用 FCM 函数从 firebase 数据库中的文档中获取数据。

export const sendToDevicePaidBribe = functions.firestore
  .document('PaidBribe/{bribeId}')
  .onCreate(async snapshot => {


    const report = snapshot.data();
    const querySnapshot = await db
      .collection('users')
      .doc(report.uid).get();

    const token = querySnapshot.data();

    const payload: admin.messaging.MessagingPayload = {
      notification: {
        title: 'Report Submited!',
        body: `Report id: ${report.id} on ${report.date}`,
        icon: 'your-icon-url',
        click_action: 'FLUTTER_NOTIFICATION_CLICK'
      }
    };

    return fcm.sendToDevice(token.fcmToken, payload);
  });

当我尝试部署函数时,出现以下错误。

src/index.ts:48:30 - error TS2532: Object is possibly 'undefined'.
    return fcm.sendToDevice(token.fcmToken, payload);
                            ~~~~~

有人可以指导我为什么会出现此错误吗?

由于 Firestore 无法保证任何给定文档在查询之前就存在,因此您应该在代码中自行检查。请注意 API 文档,如果文档不存在,snapshot.data() 可以 return 未定义。 TypeScript 让你处理代码中未定义的可能性。你可以通过在使用它之前简单地检查它来做到这一点:

const token = querySnapshot.data();
if (token) {
    // work with token safely here
}

if (token) 块内,TypeScript 向您保证 token 不可能是未定义的,您可以自由地安全地引用它的属性。