export type Signal<T> = {
    get: SignalGetter<T>;
    set: SignalSetter<T>;
    subscribe: SignalSubscriber<T>;
};
export type SignalGetter<T> = () => T;
export type SignalSetter<T> = (value: T | ((value: T) => T), force?: boolean) => void;
export type SignalSubscriber<T> = (fn: (value: T) => void) => () => void;
/**
 * Create a new signal
 *
 * @param value Initial signal value
 * @param equals Compare function
 * @returns Signal
 */
export declare function signal<T>(value?: T | undefined, equals?: (a: T, b: T) => boolean): Signal<T>;
