Я пытаюсь создать эпопею, которую я делал несколько раз прежде, но в этот раз, похоже, не работает. Имея всего три файла, связанных с эпопеями, index.ts, root-epic.ts и эпический файл, содержащий две эпопеи, код, показанный ниже (в частности, строка epic.run(rootEpic);
), выдает эту ошибку:
Аргумент типа '(action $: ActionsObservable, store: Store, {api, endPointKeys}: IEpicDependency) => Observable' нельзя назначить параметру типа 'Epic, Action, void, IEpicDependency>'.
Типы параметров «store» и «state $» несовместимы.
Тип StateObservable не может быть назначен типу Store.
Свойство «рассылка» отсутствует в типе «StateObservable»
Есть идеи, как это можно решить?
корень эпос:
import { combineEpics } from 'redux-observable';
import { fetchRefDataCountriesEpic, fetchRefDataRegionsEpic } from './epics/fetch-ref-data-epic';
export const rootEpic = combineEpics(fetchRefDataCountriesEpic, fetchRefDataRegionsEpic);
index.ts:
import 'rxjs';
import { createStore, applyMiddleware, compose} from 'redux';
import { createEpicMiddleware } from 'redux-observable';
import { routerMiddleware } from 'connected-react-router';
import { logger } from 'redux-logger';
import { api, endPointKeys } from '../services';
import { IEpicDependency } from '../models';
import { rootReducer} from './root-reducer';
import { rootEpic } from './root-epic';
import { appHistory } from '../app-history';
const dependenciesObject: IEpicDependency = { api, endPointKeys };
const epic = createEpicMiddleware({dependencies:dependenciesObject});
const middlewareList = [epic, logger, routerMiddleware(appHistory())];
const windowlfDefined = typeof window === 'undefined' ? null: window as any;
const composeEnhancers = windowlfDefined.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const middlewares = composeEnhancers( applyMiddleware(... middlewareList));
const store = createStore(rootReducer(appHistory()), middlewares);
epic.run(rootEpic);
export { store };
выборка-реф-данные-epic.ts:
import { ActionsObservable, ofType } from 'redux-observable';
import { Observable, of } from 'rxjs';
import { mergeMap, map, catchError } from 'rxjs/operators';
import { Store } from 'redux';
import { IAppAction } from '../app-action';
import { IAppState } from '../state';
import { IAppError, IEpicDependency } from'../../models/misc';
import { referenceDataStateActions, fetchRefDataCountriesSuccess, fetchRefDataCountriesError, fetchRefDataRegionsError, fetchRefDataRegionsSuccess } from '../actions';
import { ICountry, IRegion } from '../../models/reference';
export const fetchRefDataCountriesEpic = (action$:
ActionsObservable<IAppAction>, store: Store<IAppState>, { api, endPointKeys
}: IEpicDependency):
Observable<IAppAction> => action$.pipe(
ofType(referenceDataStateActions.FETCH_REF_DATA_COUNTRIES),
mergeMap(() => {
return api.get(endPointKeys.url, 'sitecountry').pipe(
map((res:any) => res.data.data),
map((countries: Array<ICountry>) => fetchRefDataCountriesSuccess(countries)),
catchError(error => {
const appError: IAppError = { error, message:'Failed to retrieve countries' };
return of(fetchRefDataCountriesError(appError))
}) )}) );
export const fetchRefDataRegionsEpic = (action$:
ActionsObservable<IAppAction>, store: Store<IAppState>, { api, endPointKeys
}: IEpicDependency):
Observable<IAppAction> => action$.pipe(
ofType(referenceDataStateActions.FETCH_REF_DATA_REGIONS),
mergeMap(() => {
return api.get(endPointKeys.url, 'siteregion').pipe(
map((res:any) => res.data.data),
map((regions: Array<IRegion>) => fetchRefDataRegionsSuccess(regions)),
catchError(error => {
const appError: IAppError = { error, message:'Failed to retrieve regions' };
return of(fetchRefDataRegionsError(appError))
}) )}) );
другой код:
import { Observable } from 'rxjs';
export interface IServiceApi {
get(apiKey: string, url: string, data?: any): Observable<any>;
post(apiKey: string, url: string, data?: any): Observable<any>;
put(apiKey: string, url: string, data?: any): Observable<any>;
export interface IEndPointKeys { url: string;}
export interface IEpicDependency { api: IServiceApi, endPointKeys: IEndPointKeys}
Версия:
rxjs 6.3.3
redux-observable 1.0.0
typescript 3.1.6
redux 4.0.0
react 16.6.0
react-dom 16.6.0
react-redux 5.0.7
react-router 4.3.1
react-router-dom 4.3.1
@types/react 16.4.18
@types/react-dom 16.0.9
@types/react-redux 6.0.9