Angular 4:使用构造函数作为http Observable模型的类

时间:2017-11-08 10:18:03

标签: angular typescript

在我的应用程序中,我将一个模型定义为带有构造函数的Class。像这样:

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`)
}

正如预期的那样,它不起作用

我该如何解决这个问题?我还应该创建一个界面还是什么?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:3)

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)))
}