Firestore 文档打字稿 doc.data() 未定义?

Bad*_*dgy 3 javascript firebase typescript google-cloud-firestore

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

    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;
    }
Run Code Online (Sandbox Code Playgroud)

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

Dou*_*son 6

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.
}
Run Code Online (Sandbox Code Playgroud)
  1. 使用运算符告诉 TypeScript 您确定结果将是“真实的” !
const data = userDoc.data()!  // data is now typed as just DocumentData
Run Code Online (Sandbox Code Playgroud)