使用typescript
v2.3.4,以下代码运行良好:
getStuff() : Promise<IStuff>{
return this.http.get(url, options)
.toPromise()
.then( (res) => {
let stuff: IStuff;
if (res.json().data){
stuff = res.json().data;
}
return stuff;
})
.catch( (reason) => {
this.handleError(reason);
});
}
...其中handleError
是这样的:
handleError = (error:any) => {
this.debug(error);
throw error;
};
现在,使用typescript
v2.4.1我收到错误:'Type 'Promise<void | IStuff>' is not assignable to type 'Promise<IStuff>'. Type 'void | IStuff' is not assignable to type 'IStuff'. Type 'void' is not assignable to type 'IStuff'.'
我明白为什么会这样。
...但是这样做了,对我来说没有意义,当其他代码没有时,它会起作用:
getStuff() : Promise<IStuff>{
return this.http.get(url, options)
.toPromise()
.then( (res) => {
let stuff: IStuff;
if (res.json().data){
stuff = res.json().data;
}
return stuff;
})
.catch( (reason) => {
if( reason.status) {
return Promise.reject(reason);
} else {
this.handleError(reason);
}
});
}
...在else
的情况下,它正在完成上面产生错误的代码正在做的事情,但是没有错误。
我可以通过将handleError
更改为:
handleError = (error:any):Promise<any> => {
this.debug(error);
Promise.reject(error);
};
...但我很好奇特定的更改是什么导致它成为一个错误,以及为什么添加if/else
块在其具有与其相同的else路径时正常工作原始代码?
答案 0 :(得分:2)
使用TypeScript 2.4版本,TypeScript对泛型和Promise回调变得更加严格,这将导致升级问题,特别是那些使用Promises的问题。我在几个应用程序中都注意到了这一点。您可以在2.4。的发行说明中read about it。