Angular 6 HttpClient返回类的实例

Sco*_*ark 7 typescript angular-http angular angular-httpclient

在引入angular的新HttpClient之前,可以使用instanceof关键字验证从http api调用返回的对象.他们不再能够使用HttpClient模块了.我正在尝试一些简单的方法,但类型检查每次都返回false.期望的行为:

```

getCow() {
    return this.http.get<Cow>(ApiRoute.GET_COW, options)
        .map(res => res as Cow)
        .toPromise()
        .then((c: Cow) => {
            console.log(c instanceof Cow); //this is false
        })
}
Run Code Online (Sandbox Code Playgroud)

```

会回归真实.有谁知道在http客户端幕后新建一个实例的简单方法?

Est*_*ask 8

TypeScript使用结构类型,即c对象不必是符合类型Cow 的实例.Cow

TypeScript类型仅在编译时存在,不会以任何方式影响JS输出(除了用于Angular DI的发出类型).as Cow断言res符合Cow类型,同时instanceof Cow期望它cCow类的实例.既然Cow没有实例化,那cow instanceof Cow就是假的.

应该设计一个类来支持水合(可能通过构造函数参数)并显式实例化:

class Cow {
  sound: string;
}

return this.http.get<Cow>(ApiRoute.GET_COW, options)
    .map(res => Object.assign(new Cow(), res as Cow))
    .toPromise()
    .then((c: Cow) => {
        console.log(c instanceof Cow);
    })
Run Code Online (Sandbox Code Playgroud)

如果需要一些逻辑来构造Cow普通对象的实例(验证,嵌套对象构造),这可以在类构造函数或单独的辅助函数(例如Cow静态方法)中完成.