You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript无法返回指定元组类型,求正确类型定义语法

修正TypeScript异步函数的元组返回类型

你现在的问题是TypeScript把函数返回的元组识别成了数组,导致解构后类型不符合预期。以下是修正后的代码:

export function to<T>(promise: Promise<T>): Promise<[Error | null, T | null]> {
  return promise
    .then(data => [null, data] as const)
    .catch(err => [err as Error, null] as const);
}

关键修正点:

  • 明确元组返回类型:把原来的Promise<(T|null)[]|[Error, null]>改成Promise<[Error | null, T | null]>,直接指定这是固定顺序的二元组,而非数组或模糊的联合类型。
  • 使用as const断言:在then和catch的返回数组后加上as const,让TypeScript把数组认定为只读元组,避免被自动宽化为可扩展的数组类型,确保每个位置的类型严格对应。

测试修正后的用法:

const [err, result] = await to(api.changePassword(username, password));
// err 的类型:Error | null
// result 的类型:api.changePassword返回的类型 | null

原来的写法之所以出问题,是因为联合数组类型(T|null)[]|[Error, null]会被TypeScript处理成“任意元素为T|null或Error|null的数组”,解构时自然无法区分两个位置的具体类型。换成明确的元组类型后,TypeScript就能准确推断每个解构变量的类型了。

内容的提问来源于stack exchange,提问作者Lovethenakedgun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:25:52