/**
 * An implementation of {@link https://en.wikipedia.org/wiki/Signals_and_slots | Signals and slots}.
 *
 * @packageDocumentation
 */
import type { Signal, SignalOptions, GenericSignalOptions, BehaviorSignalOptions, ReplaySignalOptions, BatchedSignalOptions } from './types';
/**
 * A function to create a new {@link Signal}
 *
 * @param options - See {@link SignalOptions}
 *
 * @example
 *
 * ```typescript
 * const defaultSignal = createSignal<number>();
 *
 * // Behavior Signal, always emitted with the latest value when added
 * const behaviorSignal = createSignal<number>({variant: 'behavior'});
 *
 * // Replay Signal, replay the last values when added according to `bufferSize`
 * const replaySignal = createSignal<number>({variant: 'replay'});
 *
 * // Batched Signal
 * const scheduler = ...; // e.g. `(task) => setTimeout(task, 1000)`
 * const signal = createSignal<number>({
 *     variant: 'batched',
 *     schedule: scheduler.schedule,
 *     emitImmediatelyWhenFull: true, // If you don't want to lose the data
 *     bufferSize: 10, // Buffer upto 10 subjects
 * });
 *
 * ```
 */
export declare function createSignal<T = undefined>(options?: GenericSignalOptions): Signal<T>;
export declare function createSignal<T = undefined>(options: ReplaySignalOptions): Signal<T>;
export declare function createSignal<T = undefined>(options: BehaviorSignalOptions): Signal<T>;
export declare function createSignal<T = undefined>(options: BatchedSignalOptions): Signal<T, T[]>;
export declare function createSignal<T = undefined>(options: SignalOptions): Signal<T, T>;
