export interface EventFn<T extends unknown[]> {
    (...args: T): void;
}
export interface Event<T extends unknown[]> {
    /**
     * Subscribe to this event until the current lifecycle is disposed.
     */
    (listener: EventFn<T>): void;
}
/**
 * An emitter for a single event type.
 *
 * @example
 * ```tsx
 * import { Emitter } from "rvx";
 *
 * const emitter = new Emitter<[address: string, port: number]>();
 *
 * emitter.event((address, port) => {
 *   console.log("Connected:", address, port);
 * });
 *
 * emitter.emit("127.0.0.1", 12345);
 * ```
 */
export declare class Emitter<T extends unknown[]> {
    #private;
    /**
     * Subscribe to this event until the current lifecycle is disposed.
     */
    event: Event<T>;
    /**
     * Emit this event.
     *
     * Note, that listeners will run immediately in the current context.
     */
    emit: EventFn<T>;
}
//# sourceMappingURL=event.d.ts.map