2017-05-02 12 views
0

私は角度2を使用していますが、オブジェクトのコレクションを返すためにエンドポイントを呼び出そうとしています。Observable Mapはtypescriptクラスにキャストされません

私は、次のコード

を使用してエンドポイントを呼び出すルートサービスを持っている私は、次のJSON

[{"id":610,"branch":"Coventry"},{"id":620,"branch":"Shoreham"}] 

を返すAPIエンドポイントを有する

export class Route 
{ 
    public branchId: number; 
    public branch: string; 
    public isTest: boolean = true; 
} 

以下TypesScriptクラスを有します

public getRoutes(): Observable<Route[]> 
{ 
    const url = 'http://localhost/routes'; 

    return this.http.get(url) 
     .map((response: Response) => 
     { 
      const routes: Route[] = response.json() as Route[]; 
      if (routes.length > 0) { 
       console.log(routes[0].isTest); 
       //This returns undefined I was expecting the boolean value true 
      } 
      return routes; 

     } 
     ) 
     .catch(e => this.httpErrorService.handleError(e)); 
} 

これは、response.json()がデータ型Rにキャストされていないようですoute。どうしてこれなの?

答えて

2

TypeScriptのような厳密なキャストは実行できず、オブジェクトがそのタイプになることはできません。このキャストは、コードの残りの部分にRoute配列を使って作業していることを伝える単純なトランスクリプタのトリックです。 JSONデータが設定されたプロパティのすべてを持っていない場合は、必要がない

const routes: Route[] = (response.json() as []).map((obj) => { 
    return Object.assign(new Route(), obj); 
}) as Route[]; 

:本当にJSONデータは、タイプRouteだけでなくObjectあなたがそうのようにそれらを入力するassignメソッドを使用することができるのであることを取得するにはその時点で型付きオブジェクトを扱っているかのように動作するはずのインターフェースに対して開発を進めているので、assignメソッドを使用することができます。

+0

ありがとうTeddy that tryick –

関連する問題