@tanstack/store
Version:
Framework agnostic type-safe store w/ reactive framework adapters
32 lines (31 loc) • 1.22 kB
text/typescript
import { AnyUpdater, Listener } from './types.cjs';
export interface StoreOptions<TState, TUpdater extends AnyUpdater = (cb: TState) => TState> {
/**
* Replace the default update function with a custom one.
*/
updateFn?: (previous: TState) => (updater: TUpdater) => TState;
/**
* Called when a listener subscribes to the store.
*
* @return a function to unsubscribe the listener
*/
onSubscribe?: (listener: Listener<TState>, store: Store<TState, TUpdater>) => () => void;
/**
* Called after the state has been updated, used to derive other state.
*/
onUpdate?: () => void;
}
export declare class Store<TState, TUpdater extends AnyUpdater = (cb: TState) => TState> {
listeners: Set<Listener<TState>>;
state: TState;
prevState: TState;
options?: StoreOptions<TState, TUpdater>;
constructor(initialState: TState, options?: StoreOptions<TState, TUpdater>);
subscribe: (listener: Listener<TState>) => () => void;
/**
* Update the store state safely with improved type checking
*/
setState(updater: (prevState: TState) => TState): void;
setState(updater: TState): void;
setState(updater: TUpdater): void;
}