2016-05-07 4 views
1

で戻り値の型を指定:私はしかし私は私が私の見解ではそれらを反復処理することができるように配列にハッシュを変換するためにマップを使用したデータへのアクセス方法持ってangular2 typescriptです方法

public getCrawlsStatuses():Observable<ICrawlsStatus[]> { 

     let _statusesURL:string = `${this.API_URL}/crawl_statuses`; 

     return this._http.get(_statusesURL) 
      .map((res:Response) => { 
       let statuses:ICrawlsStatus[] = []; 
       Object.keys(res.json()).map(key => { 
        statuses.push({ 
         name: key, 
         total: res.json()[key] 
        }) 
       }); 
       return statuses; 
      }) 
      .catch(CrawlsService.onError); 
    } 

をこれだけでの観察可能なマップメソッドの戻り値を利用してマッピングを短縮することを決定し、変数は少し冗長のステータス見つける:彼らがする必要があるとして

型チェックの面で
public getCrawlsStatuses():Observable<ICrawlsStatus[]> { 

     let _statusesURL:string = `${this.API_URL}/crawl_statuses`; 

     return this._http.get(_statusesURL) 
      .map((res:Response) => { 
       return Object.keys(res.json()).map(key => { 
        return { 
         name: key, 
         total: res.json()[key] 
        } 
       }); 
      }) 
      .catch(CrawlsService.onError); 
    } 

これは、ここの外のコンポーネントの[OK]を動作しますcrawlsStatuses: ICrawlsStatus[];を期待するが、私の人生のために私はca返されたキーは、私のインターフェイスと一致しない場合、私はエラーを取得したいと思い

return <ICrawlsStatus>{ 
    name: key, 
    total: res.json()[key] 
} 

:ようなもの、に内部的にタイプを持つように返されたオブジェクトを作るための方法を見つけることができません。例えば名前、完全に....

答えて

3

しかし、私は内部的にタイプを持っているために返されたオブジェクトを作るための方法を見つけることができない私の人生のため、

のようなものは、ただ、地元の作成変数:

もっと

をあなたはできるだけ多くすることができますように型アサーションを回避する必要があります。https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html

+0

これは面白いですが、この場合、結果は多かれ少なかれ冗長変数になります。私はICrawlsStatus型を返す1つのライナーのほうが望ましいと思っていました。それは不可能ですか? – XGreen

+0

また、タイプアサーションに関しては、それを実行していた場合にタイプをここに含めることを試みていないでしょうか? – XGreen

関連する問題

 関連する問題