封装了一个函数,返回Promise,但是呢,这个Promise只会执行then,永远不会执行catch,请问应该怎么进行类型约束?能做到吗?谢谢了,万分感谢,我不是太通typescript
如果不能的话就算了,谢谢
function p(val) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (val > 0) {
resolve({
code: 200,
data: '成功'
});
} else {
reject({
code: 300,
data: '失败'
});
}
}, 1000);
});
}
/**
* Http函数的p函数catch时候被修改过,只会返回对象或者false,不会返回Promise.reject(),也不需要catch
* 为了防止有时候不小心判断失败时候用了catch,
* 那么请问如何给Http这个函数写返回的类型?
* async function Http(val) : 这里应该怎么写?
*/
async function Http(val) {
return p(val)
.then((res: any) => {
if (res && res.code === 200) {
return res.data;
} else {
return false;
}
})
.catch((err) => {
return false;
});
}
async function aa() {
Http(-10).then((res) => {
if (res && res.code === 200) {
console.log('res 成功');
} else {
console.log('res 失败');
}
})
/** 加上返回类型之后,希望开发下面这样写的时候会标红色下划线提示写法错误 */
// Http(-10).catch(e => {})
}
aa();
如果一个函数返回了一个 Promise,并且该 Promise 只会执行 then 方法,永远不会执行 catch 方法,那么可以将这个函数的返回值约束为一个 never 类型的 Promise。
never 类型表示永远不会有返回值的情况,因此,如果一个函数返回值是 never 类型的 Promise,则表示该函数的返回值永远不会执行 catch 方法。
示例代码如下:
在上面的代码中,函数 foo 返回了一个 never 类型的 Promise,并通过调用 resolve 方法来执行 then 方法,永远不会执行 catch 方法。
通过这种方式,我们可以将函数的返回值约束为 never 类型的 Promise,从而保证该函数返回值永远只会执行 then 方法,永远不会执行 catch 方法。