問題タブ [angular-httpclient]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angular - プロパティ「json」はタイプ「オブジェクト」に存在しません
angular 2 HttpClientを使用してREST経由でデータをフェッチしようとしています。https://angular.io/tutorial/toh-pt6の angular チュートリアルに従っています。Heroes and HTTPセクションの下に、http 経由でヒーロー データを取得するために使用されるこのコード スニペットが表示されます。
以下は、アプリケーションで書いた同様のバージョンです
InteliJ Idea を使用していますが、response.json() の呼び出しに赤い線があり、ng buildを使用してビルドしようとしてもエラーが発生します。
プロパティ 'json' はタイプ 'Object' に存在しません。
json().data
あなたは、代わりに私が持っていることに気付くかもしれませんjson().results
。これは、チュートリアルによると、サーバーはフィールドを持つdata
オブジェクトで応答しましたが、自分のサーバーはフィールドを持つオブジェクトで応答したためresults
です。チュートリアルを少し下にスクロールすると、この点が表示されます。
サーバーが返すデータの形状に注意してください。この特定のメモリ内 Web API の例は、データ プロパティを持つオブジェクトを返します。あなたの API は何か他のものを返すかもしれません。Web API に合わせてコードを調整します。
これを修正するために、私はこのようなことを試しました
私がそれをしたとき、 .json() メソッドは解決されましたが、別のエラーがポップアップしました
Promise 型にプロパティ結果が存在しません
インターフェイスを定義することでそれを修正しようとしました
そして get 呼び出しを変更しました
しかし、それもうまくいきませんでした。別のエラーが表示されました
タイプ 'OrderResponse' はタイプ 'Response' に割り当てられません。
1 つの注意点として、チュートリアルでは Angular HttpModule を使用していましたが、私のアプリケーションでは新しい Angular HttpClientModule を使用しているため、エラーが発生している可能性があります。
私はAngular 2を初めて使用し、これを使用して構築する最初のアプリです。上記のコードが新しい HttpClientModule で有効でなくなった場合、新しい HttpClientModule で同じことを達成する方法について助けていただければ幸いです。
同様の質問Property 'json' does not exist on type '{}' and Property does not exist on type 'object'を見つけましたが、そこにある回答はどれも役に立ちませんでした。
アップデート
コメントが示唆しているように、新しい HttpClientModule には .json() メソッドはありません。新しいモジュールで同じ効果を達成する方法については、引き続き助けていただければ幸いです。ガイドから、彼らはこのようなことをしました
私は完全に理解していますが、私の問題は、コードがコンポーネント内ではなくサービス内にあるため、サブスクライブを呼び出して結果をインスタンスフィールドに割り当てることはあまり意味がありません。
Promise でラップされた Orders の配列を返すサービスが必要です。my コンポーネントは次のような呼び出しを行うことができます
また、サービスのフェッチ メソッドでローカル変数を宣言して、できるようにすることも考えました。
しかし、 .get() への呼び出しは非同期であり、すべてのデータがフェッチされる前にメソッドが返される可能性があり、注文配列が空になる可能性があるため、それは私にはあまり意味がありません。
アップデート
ここで要求されているのは、handleError のコードです。