@wordpress/data
Version:
Data module for WordPress.
48 lines • 1.7 kB
TypeScript
declare type MapOf<T> = {
[name: string]: T;
};
export declare type ActionCreator = Function | Generator;
export declare type Resolver = Function | Generator;
export declare type Selector = Function;
export declare type AnyConfig = ReduxStoreConfig<any, any, any>;
export interface StoreInstance<Config extends AnyConfig> {
getSelectors: () => SelectorsOf<Config>;
getActions: () => ActionCreatorsOf<Config>;
subscribe: (listener: () => void) => () => void;
}
export interface StoreDescriptor<Config extends AnyConfig> {
/**
* Store Name
*/
name: string;
/**
* Creates a store instance
*/
instantiate: (registry: DataRegistry) => StoreInstance<Config>;
}
export interface ReduxStoreConfig<State, ActionCreators extends MapOf<ActionCreator>, Selectors extends MapOf<Selector>> {
initialState?: State;
reducer: (state: any, action: any) => any;
actions?: ActionCreators;
resolvers?: MapOf<Resolver>;
selectors?: Selectors;
controls?: MapOf<Function>;
}
export interface DataRegistry {
register: (store: StoreDescriptor<any>) => void;
}
export interface DataEmitter {
emit: () => void;
subscribe: (listener: () => void) => () => void;
pause: () => void;
resume: () => void;
isPaused: boolean;
}
declare type ActionCreatorsOf<Config extends AnyConfig> = Config extends ReduxStoreConfig<any, infer ActionCreators, any> ? {
[name in keyof ActionCreators]: Function | Generator;
} : never;
declare type SelectorsOf<Config extends AnyConfig> = Config extends ReduxStoreConfig<any, any, infer Selectors> ? {
[name in keyof Selectors]: Function;
} : never;
export {};
//# sourceMappingURL=types.d.ts.map