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

阅读 2.3k
1 个回答

如果一个函数返回了一个 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 方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题