【发布时间】:2016-10-19 16:56:00
【问题描述】:
假设我们在这个 url /api/stuffs/ 有一个 rest api,我们可以在其中获取 Stuff 的列表。
这里是http获取Stuff列表的代码:
getStuffs(): Observable<Stuff[]> {
return this.http.get(this.url)
.map(this.extractStuffs)
.catch(this.handleError);
}
private extractStuffs(res: Response) {
let stuffs = res.json() as Stuff[];
return stuffs || new Array<Stuff>();
}
这段代码一切正常,除了extractStuffs函数中的stuffs数组不是Stuff的数组而是Object的数组,即使函数的签名是Observable<Stuff[]> 并且来自 api 的结果被转换为 Stuff[]。奇怪的是 typescript 编译器没有抛出任何错误(即使结果类型与签名不同),如果我们查看生成的 JS 文件,这是完全正常的:
StuffService.prototype.extractStuffs = function (res) {
var stuffs = res.json();
return stuffs || new Array();
};
显然编译器甚至没有考虑将结果转换为Stuff[]。
有什么方法可以在不手动进行的情况下正确投射?
谢谢。
【问题讨论】:
标签: angular typescript casting frontend reactivex