如何从Firestore读取地图

时间:2020-09-17 15:18:12

标签: typescript google-cloud-firestore

我正在尝试从 Firestore 中读取数据到我的TypeScript项目中。

Firestore 中,我在mapName

字段下有一个Map

使用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>'.

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

1 个答案:

答案 0 :(得分:2)

Firestore不接受或返回ES6 Map类型的对象。它仅适用于普通的旧JavaScript对象。当您在data()上调用DocumentSnapshot时,将得到这些普通对象之一。对象的属性与文档中的字段匹配。

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

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