Какая польза от SagaIterator из @ redux-saga / core - PullRequest
0 голосов
/ 08 мая 2020

Какая польза от SagaIterator в генераторе функций?

import { SagaIterator } from '@redux-saga/core'

function* getCountry(action: ReturnType<typeof actions.country.request>) : SagaIterator {
    try {       
        const selectedCountry = (state: models.InitialStateTypes) => state.selectedCountryInitial        
        const data = yield select(selectedCountry)       
        const response: AxiosResponse<models.CountryInitialResponse> = yield call(
            axios.get , 
            'https://covid19.mathdro.id/api/countries/${data}' , 
            { 
                params: action.payload 
            }
        );
        yield put(actions.country.success(response.data))
    } catch (error) {
        yield put(actions.country.failure(error))
    }
}

1 Ответ

0 голосов
/ 08 мая 2020

Глядя на исходный код, мы можем увидеть комментарий авторов:

/**
 * Annotate return type of generators with `SagaIterator` to get strict
 * type-checking of yielded effects.
 */
export type SagaIterator = IterableIterator<StrictEffect>

И просто беглый взгляд на определение StrictEffect:

export type StrictEffect<T = any> = SimpleEffect<T, any> | StrictCombinatorEffect<T>

export interface StrictCombinatorEffect<T> extends CombinatorEffect<T, StrictEffect<T>> {}

export interface SimpleEffect<T, P> {
  '@@redux-saga/IO': true
  combinator: false
  type: T
  payload: P
}

Так что это говорит, что генератор дает эффекты саги редукции, такие как put, call, select, et c. Это означает, что если вы попытаетесь выдать что-то еще в своем генераторе, вы должны получить ошибку компиляции из Typescript

...