export type Subscriber < T > = ( value : T ) => void | Promise < void > ; export type Unsubscriber = ( ) => void ; export type Updater < T > = ( value : T ) => T ; export type AsyncUpdater < T > = ( value : T ) => Promise < T & void > ; export type Invalidator < T > = ( value ? : T ) => void ; export type SubscribeInvalidateTuple < T > = [ Subscriber < T > , Invalidator < T > ] ; export type StartStopNotifier < T > = ( set : Subscriber < T > ) => Unsubscriber | void ; export interface IStore < T > { /**
     * Get value and inform subscribers.
     */ get ( ) : T ; param value set ( value ? ) : void ; param run param invalidate subscribe ( run , invalidate ? ) : Unsubscriber ; param updater update ( updater ) : void ; }