【发布时间】:2020-07-03 07:05:17
【问题描述】:
我正在开发一个用 TypeScript 编写的 Firebase Cloud Functions,它应该将实例 Map() 保存到 Cloud Firestore。 (地图的键是用户 ID,值是具有 2 个简单属性的对象;由于键的性质,我无法在运行前知道它们。) 尝试直接保存地图对象时,我得到:
参数“data”的值不是有效的 Firestore 文档。输入不是纯 JavaScript 对象(在字段“member_details”中找到)
另一种方法是避免使用 Map() 对象并使用 {} 对其进行初始化 - 如下所示:
let memberDetailsMap = {};
this.memberDetails.forEach(md => {
let payload = {
"name": md.name,
"age": md.age,
}
memberDetailsMap[md.uid] = payload; // <- !!!!!!!! ERROR
})
这甚至阻止了我将 TS 编译为带有消息的 JS:
元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“{}”。 在“{}”类型上找不到带有“字符串”类型参数的索引签名。
我尝试的另一件事是使用 JSON.stringify(memberDetailsMap) - 但这导致了一个空对象。
很遗憾,我不知道如何解决这个问题。您对此有一些提示/解决方案吗?
感谢您的帮助!
【问题讨论】:
-
请编辑问题以显示更多上下文,例如您如何分配
this.memberDetails。您现在所拥有的还不足以了解代码中发生的一切。创建this.memberDetailsMap的方式可能比使用forEach迭代this.memberDetails更惯用。 -
this.memberDetails 是(曾经)一个 MemberDetail 对象数组。但事实上,我现在将其更改为地图/对象。如果我将 Map() 用于 memberDetails,那么从其中获取 pakash 所描述类型的对象的惯用方法是什么?
标签: javascript typescript firebase google-cloud-functions