javascript - 返回 Response 和访问成员时出现 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 response = makeCall();
  return response.data;
}

typescript 错误在 return response.data 行: 类型上不存在属性数据。

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

最佳答案

makeCall 是一个生成器函数吗?如果您正在使用 yield,则必须如此,因此您可能打算键入 function* makeCall()。但是如果它是一个生成器,那么当你这样做的时候:

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

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

至于如何纠正这个问题,我需要更多关于你正在尝试做什么的信息。这是 redux-saga 代码吗?如果是这样,你不应该自己调用 saga,而是让它听取 Action (例如,使用 take, takeEvery, or takeLatest )并且 redux saga 将在 Action 发生时运行 saga。

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

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

或者调用效果:

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

关于javascript - 返回 Response 和访问成员时出现 Typescript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57333201/

相关文章:

javascript - 搜索时禁用输入字段并将焦点设置为完成

javascript - 按 unix 时间戳数据属性对元素进行排序

javascript - 在 HTML 元素之前附加字符串

scroll - Angular 2滚动到底部(聊天风格)

javascript - 如何在 typescript 中使用传单初始化 SVG 层?

typescript - 类型 'A | B' 不可分配给类型 'A & B'

javascript - 将 var t=!0/var t=!1 用于 true/false 有多安全?他们总是返回 true bool 值 true/false 吗?

javascript - Google Chrome - GET ajax 请求失败

Angular 在更改时将 ngModel 传递给组件

javascript - 当我在 javascript 中手动创建列表时,无法使用 querySelectorAll(); 获取值;