Облачные функции Firebase: сохранить TypeScript Map () - как? - PullRequest
0 голосов
/ 22 марта 2020

Я работаю над облачными функциями Firebase, написанными на TypeScript, которые должны сохранять экземпляр Map () в Cloud Firestore. (Ключ карты - это идентификатор пользователя, а значение - это объект с 2 простыми атрибутами; из-за природы ключей я не могу знать их до выполнения.) При попытке сохранить объект карты напрямую, я получаю :

Значение аргумента «данные» не является допустимым документом 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 с сообщением:

Элемент неявно имеет тип 'any', потому что выражение типа 'string' не может быть используется для индексации типа '{}'. Не найдено сигнатуры индекса с параметром типа 'string' для типа '{}'.

Еще одна вещь, которую я попробовал, это использовать JSON .stringify (memberDetailsMap) - но это привело к пустому объекту.

К сожалению, я понятия не имею, как обойти эту проблему. У вас есть подсказка / решение для этого?

Спасибо за помощь!

1 Ответ

0 голосов
/ 22 марта 2020

Вы можете решить эту проблему, установив тип для memberDetailsMap в явном виде, например:

let memberDetailsMap: { [key: string]: any} = {};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...