Это неправильное понимание утверждений типа TypeScript .Обратите внимание, что мы не называем их «приведением типов», поскольку это не приведение типов в общеизвестном смысле.
Главное, что вы должны знать здесь, это то, что утверждения типа скомпилированы в ничто.Проверьте ваш код на TypeScript игровой площадке - очевидно, он генерирует много ошибок компиляции, поскольку это не MCVE , но достаточно хорошо, чтобы понять, что понятия Map
нетв правой части экрана.Итак, вы получаете чистый объект, пытаетесь использовать его как Map
, и, очевидно, это ошибка.
Для чего используются утверждения типа?Они используются, если вы заранее знаете, что во время выполнения тип будет отличаться от того, который объявлен во время компиляции.В этом случае, если вы действительно получили Map
от currentDoc.get
, но TypeScript настаивал на возможности использования простого объекта, вы можете просто сказать «трактуйте это как Map
, я знаю, что я делаю».Конечно, в этом случае все проверки ложатся на вас самих.
Теперь, что здесь делать?Я не знаю API Firebase, поэтому не могу дать какой-либо конкретный совет, но общее направление может быть следующим:
1) Просто используйте обычный старый объект JavaScript.У вас есть Object.keys () , for..of loop и т. Д.
2) Явно преобразуйте этот объект в Map
.Простейшим способом (хотя и требуется поддержка ES2017) является следующий однострочный: const variations = new Map(Object.entries(currentDoc.get('variation')));