首页 > 解决方案 > 返回响应和访问成员时出现打字稿错误

问题描述

此代码工作正常:

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;
}

打字稿错误在返回 response.data 行中:类型上不存在属性数据。

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

标签: javascripttypescript

解决方案


makeCall 是生成器函数吗?如果您正在使用 using yield,则必须是这样,所以大概您打算输入function* makeCall(). 但如果它是一个生成器,那么当你这样做时:

function returnData() {
  const response = makeCall();
  return response.data;
}

... makeCall() 的返回值是一个迭代器对象。迭代器没有 .data 属性,这就是打字稿给你一个错误的原因。

至于如何纠正这个问题,我需要更多关于你想要做什么的信息。这是 redux-saga 代码吗?如果是这样,您不应该自己调用 saga,而是让它监听动作(例如,使用take、takeEvery 或 takeLatest),当动作发生时,redux saga 将运行 saga。

如果你想从另一个 saga 调用一个 saga,你可以,但你要么需要使用 yield*:

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

或者调用效果:

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

推荐阅读