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

如何让自定义Promise函数返回JSON对象时支持自动提示(类似Axios)

让自定义Promise实现返回值自动提示的方法

嘿,这个需求很常见!要让你的自定义Promise在.then()回调里自动提示返回对象的属性,关键是让TypeScript(或者支持类型推断的编辑器)明确知道Promise最终resolve的值是什么类型——就像Axios的类型定义已经帮我们做好了这件事一样。

下面分两种场景给你解决方案:

1. TypeScript 环境下的实现

方法一:直接给Promise指定泛型类型

你可以在创建Promise实例时,通过泛型明确声明resolve的对象结构:

const test = () => {
  // 这里<{ object: string }>告诉TS,这个Promise会resolve一个包含object字符串属性的对象
  return new Promise<{ object: string }>((resolve, reject) => {
    resolve({ object: "Hello There" });
  });
};

// 调用时,res会自动提示object属性
test().then((res) => {
  console.log(res.object); // 编辑器会自动补全object
});

方法二:用接口/类型别名复用类型(推荐复杂结构)

如果你的返回对象结构比较复杂,或者需要多处复用,建议先定义接口或类型别名:

// 定义返回值的类型结构
interface TestResponse {
  object: string;
  // 可以添加更多属性,比如其他字段
  // id: number;
}

const test = (): Promise<TestResponse> => {
  return new Promise((resolve, reject) => {
    resolve({ object: "Hello There" });
  });
};

// 此时res会自动提示TestResponse里的所有属性
test().then((res) => {
  console.log(res.object);
});

2. JavaScript 环境下的实现

如果你用的是纯JS,也可以通过JSDoc注释让编辑器(比如VS Code)识别类型,实现自动提示:

/**
 * 自定义Promise函数
 * @returns {Promise<{ object: string }>} 返回包含object属性的Promise
 */
const test = () => {
  return new Promise((resolve, reject) => {
    resolve({ object: "Hello There" });
  });
};

// 调用时,VS Code会根据JSDoc提示res的object属性
test().then((res) => {
  console.log(res.object);
});

原理说明

Axios之所以能自动提示res.data的属性,是因为它的官方类型定义中,已经为请求方法(比如axios.get)指定了泛型的响应结构,让TS能准确推断出返回值的类型。我们自定义Promise时,只需要手动补上这个类型信息,就能让编辑器实现同样的自动提示效果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:02:58