Redux saga typescript-typen fel i yield all


Jag försöker ett väldigt enkelt exempel från redux-saga-sidan.

function* saga(): SagaIterator {
  yield takeEvery(T.GET_CREDENTIALS, getCredentials);
}

export default function* rootSaga() {
  yield all([
    saga(),
  ]);
}

Men jag får typescript-fel:

Argument of type 'IterableIterator<RootEffect | TakeEffect | 
ChannelTakeEffect<any> | PutEffect<any> | ChannelPutEf...' is not 
assignable to parameter of type '{ [key: string]: Effect; }'.
Index signature is missing in type 'IterableIterator<RootEffect | 
TakeEffect | ChannelTakeEffect<any> | PutEffect<any> | 
ChannelPutEf...'.

Vad gör jag fel? Tack för hjälpen

Svar #1

Eftersom länkar till lösningar tydligen blir nedröstade, här är lösningen:

export default function* rootSaga() {
  yield all([
    call(saga()),
  ]);
}

Svar #2

Exemplen i redux-saga-förvaret använder mestadels denna form:

export default function* rootSaga() {
    yield all([
        fork(saga1),
        fork(saga2),
        // ...
    ])
}

Se till exempel deras exempel från verkligheten. Jag är inte säker på vad poängen är med att använda fork istället för call när vi använder all runt det, eftersom den hjälparen ensam borde säkerställa parallell körning.

Relaterade artiklar