我使用Angular 2。我也有StatisticsService具有此方法:

getComingStatistics(): Promise<Map<String, number>> {
    const url = `${this.eventUrl}/rest/report/statistic/coming`;
    return this.http.get(url)
        .toPromise()
        .then(response => {

            return response.json().data as Map<String, number>
        })
        .catch(this.handleError);
}


我从组件发出此调用:

constructor(private statisticsService: StatisticsService) {}

comingStatistics: Map<String, number>;
allComingUsers: number;

ngOnInit(): void {
    this.statisticsService.getComingStatistics().then(comingStatistics => {
        console.log(comingStatistics);
        console.log(comingStatistics.values());
    });
}


问题出在这行console.log(comingStatistics.values());中。我有一个例外:Uncaught (in promise): TypeError: comingStatistics.values is not a function

同样,地图的任何一种方法都不起作用(例如keys()forEach等)。只有一种获取值的方法:comingStatistics['someKey']

如何获得地图的所有键和值?

最佳答案

类型断言欺骗类型系统以考虑结果映射

return response.json().data as Map<String, number>


但这不会使data对象成为地图。

应该将其转换为Map才能成为地图:

return new Map(Object.entries(response.json().data));

10-06 04:15