12 lines
524 B
TypeScript
12 lines
524 B
TypeScript
type ChangeFn = () => void;
|
|
type UnsubscribeFn = () => void;
|
|
type ActionFn<T> = (this: T, ...args: any[]) => T | void;
|
|
type StoreActions<Key extends string, T> = Record<Key, ActionFn<T>>;
|
|
export interface Store<T, ActionKey extends string> {
|
|
getSnapshot(): T;
|
|
subscribe(onChange: ChangeFn): UnsubscribeFn;
|
|
dispatch(action: ActionKey, ...args: any[]): void;
|
|
}
|
|
export declare function createStore<T, ActionKey extends string>(initial: () => T, actions: StoreActions<ActionKey, T>): Store<T, ActionKey>;
|
|
export {};
|