Javascript 返回响应和访问成员时出现Typescript错误

Javascript 返回响应和访问成员时出现Typescript错误,javascript,typescript,Javascript,Typescript,此代码工作正常: const { response } = yield call(makeGetRequest, requestUrl); return response.data; 然而,这并不是: function makeCall() { ... const { response } = yield call(makeGetRequest, requestUrl); return response; } function returnData() { const res

此代码工作正常:

const { response } = yield call(makeGetRequest, requestUrl);
return response.data;
然而,这并不是:

function makeCall() {
  ...
  const { response } = yield call(makeGetRequest, requestUrl);
  return response;
}

function returnData() {
  const response = makeCall();
  return response.data;
}
typescript错误在返回响应中。数据行: 类型上不存在属性数据


我假设这是因为它将响应视为any,但我不知道如何为方法提供关于对象响应类型的正确信息。我尝试了typeof response并得到了Object。

makeCall是一个生成器函数吗?如果您使用的是
yield
,则必须输入
函数*makeCall()
。但如果是发电机,那么当你这样做时:

function returnData() {
  const response = makeCall();
  return response.data;
}
。。。makeCall()的返回值是迭代器对象。迭代器没有.data属性,这就是为什么typescript会给您一个错误

至于如何纠正这一点,我需要更多关于您正在尝试做什么的信息。这是redux传奇代码吗?如果是这样,你不应该自己调用sagas,而是让它听动作(例如,with),当动作发生时,redux saga将运行saga

如果您想从另一个传奇中调用一个传奇,您可以,但您需要使用yield*:

function otherSaga*() {
  const response = yield* makeCall()
  console.log(response.data);
}
或调用效应:

function otherSaga*() {
  const response = yield call(makeCall);
  console.log(response.data);
}

当然,您肯定想了解函数返回的是什么类型,但一个快速而肮脏的修复方法可能是将响应转换为任何类型<代码>返回任何响应。数据此外,如果从请求返回的数据始终是统一类型的,我会利用TS为它定义自己的类型(如果库中不存在)。