template T export interface Action < T = any > { type : T ; } /**
 * An Action type which accepts any other properties.
 * This is mainly for the use of the `Reducer` type.
 * This is not part of `Action` itself to prevent users who are extending `Action.
 */ export interface AnyAction extends Action { [ extraProps ] : any ; } template S template A export type Reducer < S = any , A extends Action = AnyAction > = ( state : S | undefined , action : A ) => S ; template A export type ReducersMapObject < S = any , A extends Action = Action > = { [ K in keyof S ] : Reducer < S [ K ] , A > ; } ; template S param reducers returns template A export interface Dispatch < A extends Action = AnyAction > { < T extends A > ( action ) : T ; } /**
 * Function to remove listener added by `Store.subscribe()`.
 */ export interface Unsubscribe { ( ) : void ; } template S template A export interface Store < S = any , A extends Action = AnyAction > { param action returns dispatch : Dispatch < A > ; returns getState ( ) : S ; param listener returns subscribe ( listener ) : Unsubscribe ; param nextReducer replaceReducer ( nextReducer ) : void ; } template S template A template Ext template StateExt export interface StoreCreator { < S , A extends Action , Ext , StateExt > ( reducer , enhancer ) : Store < S & StateExt , A > & Ext ; } template S param reducer param preloadedState param enhancer returns template Ext template StateExt export type StoreEnhancer < Ext , StateExt , S , A extends Action > = ( next : StoreEnhancerStoreCreator < { } , { } , S , A > ) => StoreEnhancerStoreCreator < Ext , StateExt , S , A > ; export type StoreEnhancerStoreCreator < Ext , StateExt , S , A extends Action > = ( reducer : Reducer < S , A > ) => Store < S & StateExt , A > & Ext ; export interface MiddlewareAPI < D extends Dispatch , S > { dispatch : D ; getState ( ) : S ; } template DispatchExt template S template D param middlewares returns template Ext template S template A