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客户端幕后新建一个实例的简单方法?
TypeScript使用结构类型,即c对象不必是符合类型的Cow 类的实例.Cow
TypeScript类型仅在编译时存在,不会以任何方式影响JS输出(除了用于Angular DI的发出类型).as Cow断言res符合Cow类型,同时instanceof Cow期望它c是Cow类的实例.既然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静态方法)中完成.
| 归档时间: |
|
| 查看次数: |
1957 次 |
| 最近记录: |