import '../extensions/array';
import { PromiseMaybe } from '../extensions/global';
export declare type EventDefinition = (...args: any[]) => PromiseMaybe;
export declare type Unsubscribe = () => void;
export interface ICreateEventSubscribeOptions {
    immediatelyInvoke?: boolean;
}
export interface ICreateEvent<TEventDefinition extends EventDefinition> {
    invoke: TEventDefinition;
    isEnabled: boolean;
    subscribe(delegate: TEventDefinition): Unsubscribe;
    subscribe(delegate: TEventDefinition, subscriptionOptions: ICreateEventSubscribeOptions): Unsubscribe;
    dispose(): void;
}
interface ICreateEventOptions<TEventDefinition extends EventDefinition> {
    onSubscribe?(delegate: TEventDefinition): void;
}
export declare function createEvent<TEventDefinition extends EventDefinition>(): ICreateEvent<TEventDefinition>;
export declare function createEvent<TEventDefinition extends EventDefinition>(options: ICreateEventOptions<TEventDefinition>): ICreateEvent<TEventDefinition>;
export {};
