import { Signal } from "@preact-signals/unified-signals"; import { IfNever } from "type-fest"; declare class ReducerSignal extends Signal { constructor(value: T, reducer: Reducer); /** * * dispatch is automatically binds to signals, so you can destructure it * @param args */ dispatch: (...args: IfNever) => void; /** @internal */ _r: Reducer; } export type Reducer = (state: T, action: TAction) => T; declare function ReducerSignal(this: ReducerSignal, value: T, reducer: Reducer): void; declare namespace ReducerSignal { var prototype: ReducerSignal; } export { ReducerSignal }; /** * * @description implementation of Reducer pattern for signals * @example * ```tsx * const reducer = (it: number, action: { type: 'increment' | 'decrement' }) => { * switch (action.type) { * case 'increment': * return it + 1 * case 'decrement': * return it - 1 * } * } * * const counter = reducerSignal(0, reducer) * * effect(() => { * console.log('counter value', counter.value) * }) * // prints 1 * counter.dispatch({ type: 'increment' }) * * // dispatch can be destructured, other parameters not * const { dispatch } = reducerSignal * // prints 2 * dispatch({ type: 'increment' }) * ``` * * @param value initialState * @param reducer reducer function (do not track reactive dependencies) * @returns */ export declare const reducerSignal: (value: T, reducer: Reducer) => ReducerSignal;