首页 > 解决方案 > Firestore 文档 Typescript doc.data() 未定义?

问题描述

目前正在清理一些代码并在打字稿中重写了很多。我发现让我好奇的是以下代码:

    const userRef = firestore.collection('users').doc(userId);
    const userDoc = await userRef.get();

    if (userDoc.exists) {
        const userData = userDoc.data();

        const currentUserBalance = userData.balance ? userData.balance : 0;
    }

userData现在 Typescript可能会抱怨undefined,但是当我在我的块.data()中检查上面存在的文档时,不能未定义文档。if只是好奇为什么会发生这种情况以及我是否在这里有逻辑问题。

标签: javascripttypescriptfirebasegoogle-cloud-firestore

解决方案


existsTypeScript 对和之间的关系一无所知data()。它只知道 的签名data()表示返回值可以是 DocumentSnapshot 或未定义。因此,您必须通过以下任一方式满足编译器:

  1. 首先检查“真实性”,如果是,则使用结果:
const data = userDoc.data()
if (data) {
    // In this block, data is now typed as just DocumentData,
    // undefined is no longer an option.
}
  1. 使用运算符告诉 TypeScript 你确定结果将是“真实的” !
const data = userDoc.data()!  // data is now typed as just DocumentData

推荐阅读