javascript - 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
只是好奇为什么会发生这种情况以及我是否在这里有逻辑问题。
解决方案
exists
TypeScript 对和之间的关系一无所知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
推荐阅读
- c++ - 在类中使用 std::chrono::high_resolution_clock 播种 std::mt19937 的正确方法是什么?
- elixir - 合并地图列表
- ruby-on-rails - 使用 Rails 和设计的 Azure AD 身份验证
- android - 在两个不同的时刻在后台调度线程
- c - C memcpy() 分段错误
- c# - “this”如何在 C# 中传递
- http - 如果 http 请求失败,如何添加超时?
- javascript - Nodejs Buffer.from(..) 转换 javascript react native
- reactjs - 如何使用 React Hooks 使用 Spring WebFlux 服务
- html - 如何垂直放置元素而不是相互叠加