The best example I have found so far are those used in the F8 Facebook app here .
It is very similar to yours:
export type Dispatch = (action: Action | ThunkAction | PromiseAction | Array<Action>) => any;
export type GetState = () => Object;
export type ThunkAction = (dispatch: Dispatch, getState: GetState) => any;
export type PromiseAction = Promise<Action>;
In my project, it worked very well, although I do not send it directly to the store.