firebase Typescript:类型“never”上不存在属性“size”

wydwbb8l  于 2023-03-24  发布在  TypeScript
关注(0)|答案(2)|浏览(207)

我不明白为什么下面的代码会出现这个错误。
Typescript:类型“never”上不存在属性“size”
错误指向friendRef.size
它还在friendRef.update上给出了一个错误:
属性“update”在类型“never”上不存在
如何在一个只返回1条或0条记录的集合上正确运行WHERE子句查询,然后更新它的一些属性?

export const onRespondedToFriendRequest = functions.firestore
  .document("users/{userDocID}/notifications/{notifID}")
  .onUpdate(async (change, context) => {
    const notifID = context.params.notifID;
    const uid = context.params.userDocID; // user A
    const beforeData = change.before.data();
    const afterData = change.after.data();
    const friendUID = afterData.uid; // user B (the friend)

    // If notifID is "2" and moveOnToNextStep = true
    if (notifID === "2" && afterData.moveOnToNextStep) {
      const friendsQuerySnapshot = await fs
        .collection("users/" + friendUID + "/friends")
        .where("uid", "==", uid)
        .limit(1)
        .get();

      let friendRef;

      friendsQuerySnapshot.forEach((friendDoc) => {
        friendRef = friendDoc.ref;        
      });

      if (friendRef && friendRef.size !== 0) { // ERROR HERE
        
        await friendRef.update({ // ERROR HERE
          stat: "1",
          modifiedDate: Math.floor((new Date).getTime()/1000).toString(),
        });
      }
    }
  });
jmo0nnb3

jmo0nnb31#

friendRef的设置类型:

let friendRef: Parameters<typeof friendsQuerySnapshot.forEach>[0]
a9wyjsp7

a9wyjsp72#

你的代码没有处理没有结果的情况。在这种情况下,friendRef将是undefined(它的默认值),你不能在上面调用sizeupdate
最简单的修复方法是首先检查空结果,然后才有代码的其余部分:

const friendsQuerySnapshot = await fs
  .collection("users/" + friendUID + "/friends")
  .where("uid", "==", uid)
  .limit(1)
  .get();

if (!friendsQuerySnapshot.empty) {
  let friendRef;

  friendsQuerySnapshot.forEach((friendDoc) => {
    friendRef = friendDoc.ref;        
  });

  if (friendRef) {
    await friendRef.update({
      stat: "1",
      modifiedDate: Math.floor((new Date).getTime()/1000).toString(),
    });
  }
}

在这一点上,你实际上也不再需要循环了,你可以这样做:

const friendsQuerySnapshot = await fs
  .collection("users/" + friendUID + "/friends")
  .where("uid", "==", uid)
  .limit(1)
  .get();

if (!friendsQuerySnapshot.empty) {
  const friendRef = friendsQuerySnapshot.docs[0].ref;

  await friendRef.update({
    stat: "1",
    modifiedDate: Math.floor((new Date).getTime()/1000).toString(),
  });
}

相关问题