2017-11-08 8 views
1

私のアプリケーションでは、クラスとしてコンストラクタで定義されたモデルがあります。このように:予想通り角4:コンストラクタを持つクラスhttpで観察可能なモデル

export class Movie { 
    title: string; 
    posterURL: string; 
    description: string; 

    public constructor(cfg: Partial<Movie>) { 
     Object.assign(this, cfg); 
    } 

    getEndDate(): Date { 
     return new Date(); 
    } 
}; 

私もこのモデルを使用してHTTPリクエスト

を持って
getMoviesData(): Observable<Movie[]> { 
    return this.http.get<Movie[]>(`http://localhost:3544/movies`) 
} 

、それは

どのように私はこの問題を解決することができますが動作しませんか?私はまた、インターフェイスまたは何を作成する必要がありますか?助けのための

感謝:)

答えて

2

HttpClient方法が一般的であり、this.http.get<Movie[]>は結果がMovie[]インターフェースに準拠しており、Movieインスタンスを作成していないと主張しています。

結果がクラスインスタンスになるためには、クラスを明示的にインスタンス化する必要があります。クラスコンストラクターは、クラスインスタンスに割り当てられるプロパティを明示的に受け入れ、Movieは既にcfgパラメーターでこれを行います。

それはPartial<Movie>タイプを正確にインタフェースを記述可能性は低いので、それは別のインタフェースを宣言すると良いでしょう:

interface IMovie { 
    title: string; 
    posterURL: string; 
    description: string; 
} 

class Movie implements IMovie { ... } 

... 

getMoviesData(): Observable<Movie[]> { 
    return this.http.get<IMovie[]>(...) 
    .map(plainMovies => plainMovies.map(plainMovie => new Movie(plainMovie))) 
} 
+0

感謝を!それは働いた:) – Nausik

+0

あなたは大歓迎です。 – estus

関連する問題