2017-05-23 35 views
1

私はAngular 2を使用します。マップからすべてのキーをタイプスクリプトで取得するにはどうすればよいですか?

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());である。また、私はこの方法を持っているStatisticsServiceを持っています。この例外があります:Uncaught (in promise): TypeError: comingStatistics.values is not a function

また、地図の方法はどれも役に立ちません(keys()、など)。値を取得する方法は1つだけです:comingStatistics['someKey']

マップのキーと値をすべて取得するにはどうすればよいですか?

+0

は、マップにアクセスしようとする前に、ローカル変数に値を割り当てることを確認してください。 –

+0

次に、.get(property)を試してください。ここで、 "property"は取得しようとしている値の名前です。 –

答えて

1

型アサーションは、結果に

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

でマップを検討する型システムを騙ししかし、それはdataオブジェクトマップを作成しません。

それはマップであるためにMapに変換する必要があります。

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

このエラーは次のような場合に発生します: 'プロパティエントリが型 'ObjectContructor''に存在しません。 – faoxis

+0

これはES2017メソッドです。 TypeScriptが正しく設定されている必要があります。 'lib'セクションに' es2017'があり、それぞれのpolyfillもロードされていなければなりません。 – estus

+0

ありがとう!しかし今は 'Property 'json'が型 '{}'に存在しません。それは何ですか ? – faoxis

関連する問題