如何声明返回对象数组Promise的方法?TypeScript报错求助
解决你的Promise返回类型错误问题
看起来你这段代码的问题主要出在函数返回值不匹配和Promise处理不当上,TypeScript的错误提示就是在告诉你函数没有返回声明的Promise<any[]>类型。我来一步步帮你修正:
问题分析
- 缺少返回整个Promise链:你的
readAll方法声明了返回Promise<any[]>,但你没有把this.handler.getObject().promise()这条Promise链return出去,函数默认返回undefined,这直接导致类型不匹配。 - Promise创建错误:在
then回调里,你写了return new Promise( ( resolve ) => data )——这里根本没有调用resolve(data),这个Promise会一直处于pending状态,而且完全没必要这么做,直接返回data即可,then会自动把它包装成resolved的Promise。 - 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
相关产品推荐
相关产品推荐

