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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:27:18