typescript - 'DocumentData | 类型的参数 undefined' 不可分配给“DocumentData”类型的参数
问题描述
首先,我想说我的很多代码可能很糟糕,所以我很抱歉。我的 .ts 和 .js 体验并没有让我感觉超级舒服(因此我无法解决这个问题)。所以我正在尝试将文档内容从一个文档获取到另一个文档。目前通过快照进行,但我确信有更快更好的方法。我的代码如下。
当我尝试将第二个集合(redacted2)的文档设置为快照数据时,会发生错误。从控制台日志中可以看出,我知道 snapshot.data() 具有我需要的有价值的信息,并且完全按照我想要的方式进行了格式化。我假设这类似于在 swift 中有一个保护语句,我可以在其中检查 null 的值并将其分配给给定的类型(但我在这里可能是错的)。
db.collection("Redacted").doc(context.params.sensors).get()
.then(function(querySnapshot){
console.log("Query Snapshot is is isssss: ", querySnapshot)
console.log("Query Snapshot querySnapshot.data: ", querySnapshot.data)
console.log("Query Snapshot querySnapshot.data(): ", querySnapshot.data())
console.log("Query Snapshot querySnapshot.ref: ", querySnapshot.ref)
console.log("Query Snapshot querySnapshot.get: ", querySnapshot.get)
return querySnapshot
}).then(function(querySnapshotData) {
console.log("ayoooooo blooooddd", querySnapshotData)
db.collection("Redacted2").doc(context.params.sensors).set(querySnapshotData.data())
.then((alertResponse1: any) => {
console.log("Successfully updated firestore: ", alertResponse1)
})
.catch ((alertError1: any) => {
console.log("Successfully updated firestore but with error: ", alertError1)
})
})
.catch(function(error) {
console.log("query snapshot error: ", error)
});
解决方案
正如您从DocumentSnapshot.data() 的 API 文档中看到的那样,data()
它被声明为返回DocumentData
or undefined
。undefined
如果文档不存在,则可能是这样。TypeScript 不会让你调用可能是的方法undefined
,因为这会在运行时产生错误。您必须向 TypeScript 保证其结果实际上是 aDocumentData
和 never undefined
。
const data = snapshot.data()
if (data) {
// data will never be undefined here, because we just checked that.
const foo = data.foo
}
推荐阅读
- jquery - 双打的 Firestore 查询
- javascript - React: TypeError: Object(...) is not a function in Material UI
- vue.js - Vuex商店从firebase返回对象结果不起作用
- javascript - 与路由器的事件绑定
- mongodb - Mongodb - findOneAndDelete() - 不是函数
- magento - 设置时 Magento 2 更少的编译错误:静态内容:部署和前端页面损坏
- apache-camel - Camel FluentProducerTemplate 需要 Maven pom 依赖
- javascript - 在 Woocommerce 跟踪标签脚本中输出购买的订单商品数据
- python-3.x - Python3:将PDF下载到内存并将第一页转换为图像
- html - 在服务器中加载时找不到 PNG 文件