这段代码工作正常:
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/