返回一个promise 但是这个promise只会then,如何用ts进行类型约束?
封装了一个函数,返回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 方法。
示例代码如下:
function foo(): Promise<never> { return new Promise((resolve) => {
// 在这里执行一些操作,最终执行 resolve 方法,并返回一个 never 类型的 Promise
resolve();
});
}
// 调用 foo 函数
foo().then(() => {
// 只会执行 then 方法,永远不会执行 catch 方法
});
在上面的代码中,函数 foo 返回了一个 never 类型的 Promise,并通过调用 resolve 方法来执行 then 方法,永远不会执行 catch 方法。
通过这种方式,我们可以将函数的返回值约束为 never 类型的 Promise,从而保证该函数返回值永远只会执行 then 方法,永远不会执行 catch 方法。
以上是 返回一个promise 但是这个promise只会then,如何用ts进行类型约束? 的全部内容, 来源链接: utcz.com/p/933345.html