TypeScript中能否将函数返回类型设置为其回调函数的返回类型?
需求实现方案
该需求可以通过给工具函数添加泛型约束实现,具体修改如下:
核心优化点
- 新增泛型参数承接传入函数的返回值类型,替代原来的
any类型声明 - 显式定义工具函数返回值为固定结构的联合元组,避免TS自动拓宽类型为普通数组
- 兼容同步、异步两种入参函数场景
- 可选自定义错误类型的泛型参数,满足不同场景下的错误类型标注需求
修改后的代码
基础版(错误类型默认推导为unknown):
export const tryAsyncAwait = async <T>(fn: () => Promise<T> | T): Promise<[T, null] | [null, unknown]> => { try { const data = await fn(); return [data, null] as const; } catch (error) { return [null, error] as const; } };
进阶版(支持自定义错误类型):
export const tryAsyncAwait = async <T, E = unknown>(fn: () => Promise<T> | T): Promise<[T, null] | [null, E]> => { try { const data = await fn(); return [data, null] as const; } catch (error) { return [null, error as E] as const; } };
实际使用效果
传入你定义的getNum函数调用时:
const getNum = (x: number) => x * 2; // 自动推断res类型为 [number, null] | [null, unknown] const res = await tryAsyncAwait(() => getNum(2)); // 类型收窄后可直接推导为[number, null] if (res[1] === null) { console.log(res[0]) // res[0] 类型自动识别为number }
内容的提问来源于stack exchange,提问作者jmecs
相关产品推荐
相关产品推荐

