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

Promise的resolve()和reject()函数的正确TypeScript类型是什么?

Promise构造函数中resolve和reject的正确类型声明方法

你之前用typeof Promise.resolve和typeof Promise.reject声明Map类型的写法是错误的——这两个是Promise的静态方法类型,和Promise构造函数回调里的resolve、reject类型完全不匹配。

问题根源

Promise.resolve作为静态方法,类型是<T>(value?: T | PromiseLike<T>) => Promise<T>,调用后会返回一个新的Promise实例;而Promise构造函数回调里的resolve是(value: T | PromiseLike<T>) => void,它仅用于标记Promise状态为已完成,没有返回值。两者的类型差异直接导致TypeScript报错。

正确的类型声明方案

有两种实用的写法:

1. 手动声明类型

根据Promise构造函数回调的参数定义,直接写出回调对的类型:

// 泛型T对应Promise最终resolve的值类型,可根据业务场景替换成具体类型
type PromiseCallbackPair<T> = [
  (value: T | PromiseLike<T>) => void,
  (reason?: any) => void
];

// 声明Map时指定类型
const reqs: Map<number, PromiseCallbackPair<unknown>> = new Map();

// 使用示例
return new Promise((resolve, reject) => {
  reqs.set(id, [resolve, reject]);
});

2. 用TypeScript内置工具提取类型

借助Parameters工具类型,从Promise构造函数的执行器参数中自动提取resolve和reject的类型:

// 定义Promise执行器的类型
type PromiseExecutor<T> = (
  resolve: (value: T | PromiseLike<T>) => void,
  reject: (reason?: any) => void
) => void;
// 提取执行器的参数类型作为回调对类型
type PromiseCallbackPair<T> = Parameters<PromiseExecutor<T>>;

// 声明Map
const reqs: Map<number, PromiseCallbackPair<unknown>> = new Map();

// 使用示例
return new Promise((resolve, reject) => {
  reqs.set(id, [resolve, reject]);
});

如果你的Promise有明确的resolve值类型,把unknown换成对应的类型(比如string、number或自定义接口)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:20:19