目前正在清理一些代码并用 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 不知道 exists
和 data()
之间的关系。它只知道 data()
的签名表示返回值可以是 DocumentSnapshot 或未定义。因此,您必须通过以下任一方式满足编译器的要求:
- 首先检查“真实性”,然后使用结果:
const data = userDoc.data()
if (data) {
// In this block, data is now typed as just DocumentData,
// undefined is no longer an option.
}
- 通过使用
!
运算符告诉 TypeScript 您确定结果将是“真实的”:
const data = userDoc.data()! // data is now typed as just DocumentData
关于javascript - Firestore 文档 typescript doc.data() 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740870/