このURLに残りのAPIがあるとします。/api/stuffs/
ここでStuff
のリストを取得できます。すべてがextractStuffs
機能でstuffs
配列はStuff
の配列が、そして配列でないという事実を除いて、このコードで正常に動作しますangular2&typescript&reactX:httpをキャストする方法
getStuffs(): Observable<Stuff[]> {
return this.http.get(this.url)
.map(this.extractStuffs)
.catch(this.handleError);
}
private extractStuffs(res: Response) {
let stuffs = res.json() as Stuff[];
return stuffs || new Array<Stuff>();
}
:ここ
は、httpにコードがStuff
のリストを取得することです関数の署名がObservable<Stuff[]>
でapiの結果がStuff[]
にキャストされていても、Object
の代わりに結果をキャストするので、明らかに
StuffService.prototype.extractStuffs = function (res) {
var stuffs = res.json();
return stuffs || new Array();
};
:どのような奇妙なことはtypescriptですコンパイラは(結果の型はシグネチャと異なっていても)すべてのエラーを投げていない、我々は生成されたJSファイルを見てみるならば、魔女は完全に正常であることですStuff[]
はコンパイラによって考慮されていません。
手動で行うことなく正しくキャストする方法はありますか?
ありがとうございました。
するためのコードでありますいずれも動作していますが、 ' stuffJson'は' Stuff'の代わりに 'Object'を返します。ここで生成されたjs => 'jsonStuffs.forEach(function(jsonStuff){return stuffs.push(jsonStuff);});'私のコンパイラで何かが欠落する可能性がありますか? –
dafriskymonkey
キャスト用のインターフェース(クラスではない)が必要です。これはあなたの場合ですか?実際には – Picci
です。インターフェースで再試行してください。 – dafriskymonkey