首页 > 解决方案 > '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)
                });

标签: typescriptgoogle-cloud-firestoregoogle-cloud-functions

解决方案


正如您从DocumentSnapshot.data() 的 API 文档中看到的那样,data()它被声明为返回DocumentDataor undefinedundefined如果文档不存在,则可能是这样。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
}

推荐阅读