2017-10-07 15 views
0

C#の背景から来て、私はこれがtypescriptで動作するはずだと思います。クラスの他の2つのプロパティに依存する読み取り専用プロパティを含むクラスがあります。Typescript依存のプロパティ

export class Foo { 
    bar1: number; 
    bar2: number; 
    get bar3(): boolean { 
     return this.bar1 > this.bar2; 
    } 
} 

ここで、角度4で私はサービスを返します。

getFoos(fooId: number): Observable<Foo[]> { 
     return this.http.get(this.url) 
      .map((res: Response) => res.json()); 
    } 

私のREST APIレスポンスがbar3を返すだけbar1bar2ないことに注意してください。 その後、私のコンポーネントでは、Foo[]にアクセスしようとすると、そのエントリにbar3プロパティがなく、bar1bar2のプロパティしかありません。 bar3に入力する方法を教えてください。

+0

あなたは新しいキーワードとのFooオブジェクトを作成する必要があります。

getFoos(fooId: number): Observable<Foo[]> { return this.http.get(this.url) .map((res: Response) => res.json().then(data)=>{ return data.map(el=>{ let obj = new Foo(); return {obj, ...el}; } }); } 

または、ここで説明するいくつかの提案に従ってください:あなたはこれらの線に沿って、あなたのオブジェクトに何かを作成する必要がありますいずれかのあなたの問題を解決するために – MistyK

+0

JSONから解析されたオブジェクトの配列は、 'Foo'と共通の3つのプロパティのうちの2つを持っているため、自動的に' Foo'オブジェクトの配列に変換されません。 – Andreas

+0

@Andreas @MistyKは、同じこと; 'res.json()'は強く型付けされた 'Observable 'に変換されるのですか?それは 'new Foo()'を全く呼びますか? – stt106

答えて

0

あなたのコメントによるとres.json()にはタイプanyがありますので、チェックは全くありません。通常、typescriptはduck typingを使用して、オブジェクトのプロパティがインターフェイスのプロパティと一致するかどうかを確認します。そうでない場合は、すべてのメソッドが存在しません How do I cast a JSON object to a typescript class

関連する問題