首页 > 解决方案 > 如何从 Firestore 读取地图

问题描述

我正在尝试将Firestore中的数据读入我的 TypeScript 项目。

Firestore中,我在该字段下有一张地图mapName

我在使用时得到的以下数据结构JSON.stringify(change.after.data())

const test: Test = {
  mapName: {
    "v3mioXc3VoFgfj0WEq": {
      isNormalSubscription: false,
    },
    "as12oXc3VoFas12WEq": {
      isNormalSubscription: true,
    },
  },
};

interface Test {
  mapName: Map<string, any>
}

我遇到了以下错误:

Type '{ v3mioXc3VoFgfj0WEq: { isNormalSubscription: false; }; }' is not assignable to type 'Map<string, any>'.
  Object literal may only specify known properties, and '"v3mioXc3VoFgfj0WEq"' does not exist in type 'Map<string, any>'.

由于v3mioXc3VoFgfj0WEq并且as12oXc3VoFas12WEq是我事先不知道的 Firestore 密钥,我应该如何更改我的测试界面以正确管理数据?

标签: typescriptgoogle-cloud-firestore

解决方案


Firestore 不接受或返回 ES6Map类型对象。它只适用于普通的旧 JavaScript 对象。当你调用data()aDocumentSnapshot时,你会得到这些普通对象之一。对象的属性与文档中的字段相匹配。

const obj = snapshot.data()   // plain object
const mapName = obj.mapName   // another plain object
const field1 = mapName.v3mioXc3VoFgfj0WEq
const field2 = mapName.as12oXc3VoFas12WEq

如果您更愿意使用Map对象,则必须将普通对象转换为新 Map。


推荐阅读