【问题标题】:Firebase Cloud Functions: save TypeScript Map() - how?Firebase 云函数:保存 TypeScript Map() - 如何?
【发布时间】: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


【解决方案1】:

您可以通过显式设置memberDetailsMap 的类型来解决此问题:

let memberDetailsMap: { [key: string]: any} = {};

【讨论】:

  • let memberDetailsMap = new Map&lt;string, any&gt;();
猜你喜欢
  • 2017-12-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 2020-07-26
  • 1970-01-01
  • 2020-08-13
相关资源
最近更新 更多