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

如何声明返回对象数组Promise的方法?TypeScript报错求助

解决你的Promise返回类型错误问题

看起来你这段代码的问题主要出在函数返回值不匹配和Promise处理不当上,TypeScript的错误提示就是在告诉你函数没有返回声明的Promise<any[]>类型。我来一步步帮你修正:

问题分析

  1. 缺少返回整个Promise链:你的readAll方法声明了返回Promise<any[]>,但你没有把this.handler.getObject().promise()这条Promise链return出去,函数默认返回undefined,这直接导致类型不匹配。
  2. Promise创建错误:在then回调里,你写了return new Promise( ( resolve ) => data )——这里根本没有调用resolve(data),这个Promise会一直处于pending状态,而且完全没必要这么做,直接返回data即可,then会自动把它包装成resolved的Promise。
  3. catch分支的类型兼容:你在catch里调用this.writeAll(),需要确保writeAll方法也返回Promise<any[]>,否则类型还是会不匹配。

修正后的代码

public readAll(): Promise<any[]> {
  // 关键:return整个Promise链
  return this.handler.getObject({ 
    Bucket: this.bucket, 
    Key: `${this.tableName}.json`, 
    ResponseContentType: 'text/plain' 
  })
  .promise()
  .then(file => {
    // 直接解析后返回数据,then会自动包装为Promise
    const data: any[] = this._parseData(file.Body.toString());
    return data;
  })
  .catch(error => {
    // 确保writeAll返回的是Promise<any[]>,比如初始化空数组后写入
    return this.writeAll();
  });
}

额外优化建议

  • 尽量避免使用any[],可以定义一个具体的类型(比如interface Item { ... }),替换成Promise<Item[]>,这样TypeScript能提供更好的类型检查。
  • 如果writeAll是用来创建初始的空JSON文件,那它的实现应该类似这样,确保返回正确的Promise类型:
    private writeAll(): Promise<any[]> {
      const initialData: any[] = [];
      return this.handler.putObject({
        Bucket: this.bucket,
        Key: `${this.tableName}.json`,
        Body: JSON.stringify(initialData)
      }).promise().then(() => initialData);
    }
    

这样修改后,TypeScript的错误应该就会消失,而且Promise的处理也更符合规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:14:17