Я считаю, что вам нужно ввести свой Generator
generi c, а также следует использовать call
для фактического вызова функции asyn c:
import {
call,
CallEffect
} from "redux-saga/effects";
function* serverSaga(): Generator<CallEffect<ServerResponse>, void, never> {
try {
// TS throws error here;
const response: ServerResponse = yield call(serverCall);
...
...
} catch (err) {
...
}
}
const serverCall = async (): Promise<ServerResponse> => {
try {
const response = await ...
return response;
} catch (err) {
...
}
};
Фактические типы, которые Генератор generi c может быть рассмотрен на следующем примере. Сложные саги могут сделать общие c тупыми.
type MyGen = Generator<
number, // Outgoing (what you might yield)
boolean, // What could be returned
string // Incoming (left side of yield)
>;
function* MySaga(): MyGen {
let outgoing = 0;
while (outgoing < 10) {
outgoing++;
const incoming: string = yield outgoing;
console.log(incoming);
}
return true;
}