type Effect = (action: { payload: any }, effects: { call: any; put: any; select: any }) => Generator; type Reducer = (state: S, action: { payload: any }) => S; export interface BreadcrumbState { breadcrumbName: string | null; } export interface BreadcrumbModelType { namespace: 'breadcrumb'; state: BreadcrumbState; effects: { updateBreadcrumbName: Effect; resetBreadcrumb: Effect; }; reducers: { setBreadcrumbName: Reducer; resetState: Reducer; }; } const BreadcrumbModel: BreadcrumbModelType = { namespace: 'breadcrumb', state: { breadcrumbName: null, }, effects: { *updateBreadcrumbName({ payload }, { put }) { yield put({ type: 'setBreadcrumbName', payload, }); }, *resetBreadcrumb(_, { put }) { yield put({ type: 'resetState', }); }, }, reducers: { setBreadcrumbName(state: BreadcrumbState, { payload }: { payload: string }) { return { ...state, breadcrumbName: payload, }; }, resetState() { return { breadcrumbName: null, }; }, }, }; export default BreadcrumbModel;