export interface GetState < S > { ( ) : S ; } export interface Reducer < S > { ( state ) : S ; } export interface Dispatch < S > { ( reducer ) : S ; } export interface Listener { ( ) : void ; } export interface Unsubscribe { ( ) : void ; } export interface Middleware { < S > ( store ) : { ( next ) : { ( reducer ) : any ; } ; } ; } export interface Store < S > { getState : GetState < S > ; dispatch : Dispatch < S > ; subscribe ( listener ) : Unsubscribe ; addMiddleware ( ... middlewares ) : this ; }