gpt4 book ai didi

typescript - TypeScript 升级后 promise 返回类型错误

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:31 25 4
gpt4 key购买 nike

使用 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当 block 具有与原始代码相同的 else 路径时, block 是否正常工作?

最佳答案

随着 TypeScript 2.4 的发布,TypeScript 对泛型和 Promise 回调变得更加严格,这将导致升级问题,尤其是那些使用 Promises 的。我在我的几个应用程序中注意到了这一点。你可以read about it在 2.4 的发行说明中。

关于typescript - TypeScript 升级后 promise 返回类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com