javascript - Firestore 文档 typescript doc.data() 未定义?

标签 javascript typescript firebase google-cloud-firestore

目前正在清理一些代码并用 typescript 重写很多代码。我发现令我好奇的是以下代码:

    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;
    }

现在 Typescript 会提示 userData 可能是 undefined,但是当我检查文档时,Documents .data() 不能是 undefined存在于我的 if block 中。只是想知道为什么会这样,以及我这里是否有逻辑问题。

最佳答案

TypeScript 不知道 existsdata() 之间的关系。它只知道 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

关于javascript - Firestore 文档 typescript doc.data() 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740870/

相关文章:

javascript - 替换数组中已更改的元素

typescript :从界面创建元组

javascript - componentDidMount 最初不呈现我的数据,仅在 componentDidUpdate 上呈现

android - Firebase AdMob 警告 : 'the ad request was successful but no ad was returned due to lack of ad inventory'

javascript - 如何获得两个时刻之间的日历周差?

javascript - 下拉列表Onchange 显示其他下拉列表

typescript - 使用 Hasura graphql 模式时如何自定义 graphql-code-generator 生成字段的类型

ios - Firebase-Swift : How to add every created user to a friends list when created?

javascript - 使用 Fetch API 读取响应 header

angular - 如何在 Angular2 中绑定(bind)列表?