2016-08-01 5 views
0

これが意図どおりに機能するかどうかはわかりませんが、jsonのblobを汎用オブジェクトの配列に変換したい(オブジェクトは柔軟性があり、URLに応じて変更できます)。代わりにJSON.parse(res.json()。data)を使用する必要がありますか?ありがとう。角度2のtypecriptで汎用オブジェクト[]にJSONをキャストするにはどうすればよいですか?

return this.http.get(URL) 
         .toPromise() 
         .then(response => response.json().data as Object[]) 
         .catch(this.handleError); 
      } 
+0

はこの答えを見てい、特定の型に結果をキャストする方が良いでしょうか? http://stackoverflow.com/questions/22875636/how-do-i-cast-a-json-object-to-a-typescript-class – r3m0t

+0

いいえ、私はどのようなプロパティがオブジェクトを持っているかわからないので、typescriptクラスwouldn私のニーズに合っている。私はむしろそれをジェネリックなjavascriptオブジェクトに変換するでしょう –

+0

安全ではないキャストを行うには 'any []'を使うことができますが、この関数を多くの場所で使用しているのであれば、実際の型を入れる価値があります応答 – r3m0t

答えて

0

あなたの解決策の問題はObjectタイプは(通常以外)の任意のメンバーを持っていないので、idなどのようなあなたのJSONから特定のプロパティにアクセスしようとすると、エラーが作成されることです。

正しい方法はas any[]です:

return this.http.get(URL) 
         .toPromise() 
         .then(response => response.json().data as any[]) 
         .catch(this.handleError); 
      } 

これは、あなたがJSONレスポンス(だけでなく、JSONレスポンスではありませんでしたすべてのものにあったすべてのものにアクセスできるようになりますあなたがでエラーが発生します。ランタイム)。

How do I cast a JSON object to a typescript class

+0

私は自分のアプリケーションを設定した方法で、2つの変数を渡して、どのオブジェクトをバックエンドから取得するかを決定し、そこからGoogleチャートを作成します。私は一般的なオブジェクトが迅速にチャートを追加して情報を差し込むのが最も簡単だと考えました。統一された呼び出しではなく、さまざまなhttp呼び出しを作成する必要がなくなるtypescriptクラスを使用することに大きな利点がありますか? –

+0

あなたは、タイプセーフティを得るでしょう;)とあなたのエディタでの自動補完。大規模なプロジェクトではより重要です。 – r3m0t

+0

あなたの発信者は、タイプが正しいべきであることを知っていますか?このメソッドをジェネリックにすることができます。たとえば、 'getFromServer (URL_params)'とし、 'T []'としてキャストします。そして、この関数の戻り値は 'Promise 'になります。 – r3m0t

関連する問題