TypeScript中API GET返回对象的函数报类型错误如何解决
类型错误原因
触发类型报错的核心是函数实际返回类型和接口声明不匹配,具体问题点:
- 你声明的
getTransactionById是async函数,但函数内部没有返回接口请求的结果:仅调用了api.get()和.then()链式逻辑,没有return整个Promise链,导致函数实际返回类型为Promise<void>,和接口定义的Promise<Transaction>冲突。 - 类型定义中参数使用了大写
String(JavaScript字符串包装对象类型),TypeScript中应使用小写string表示原始字符串类型,避免包装对象带来的类型兼容问题。 - 代码存在拼写隐患:
.then()回调的参数名误写为reponse,正确拼写为response,该问题不会直接触发当前类型错误,但容易引发后续运行时/类型判断问题。
修复方案
首先修正接口定义中的参数类型,再调整函数实现保证返回值符合类型要求,两种合法实现方式如下:
方式1:async/await 写法(推荐,可读性更高)
// 修正接口参数类型为小写string interface TransactionContextData{ transactions: Transaction[] getTransactionById: (transactionId: string) => Promise<Transaction> } // 函数实现 async function getTransactionById(transactionId: string){ const response = await api.get(`transactions/${transactionId}`) return response.data }
方式2:保留Promise then链式写法
// 注意必须return整个Promise请求链,不需要额外加async关键字 function getTransactionById(transactionId: string){ return api.get(`transactions/${transactionId}`) .then((response) => response.data) }
提示:如果使用then链式写法还额外给函数加async关键字,会导致Promise被重复包装,产生不必要的性能开销。
修改完成后类型错误会直接消除,函数可以正常通过Context导出供自定义Hook调用。
内容的提问来源于stack exchange,提问作者gabrielforster
相关产品推荐
相关产品推荐

