返回一个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

回到顶部