export declare class Event<T extends any> {
    private _onSetListener;
    private _stack;
    private _eventIndex;
    /**@internal */
    constructor(_onSetListener?: () => void);
    /**@internal */
    emit: (arg: T) => void;
    /**@internal */
    removeAllListeners: () => void;
    /**@internal */
    pipe: (event: Event<T>) => {
        removeListener: () => void;
        disposer: (disposer: EventDisposer) => void;
    };
    /**
     * イベントが起きた時に実行する関数を登録する。
     * 戻り値として関数の登録を解除する関数が帰ってくる
     */
    add: (callback: (args: T) => void) => {
        removeListener: () => void;
        disposer: (disposer: EventDisposer) => void;
    };
    /**イベントが起きた時に一度だけ実行される関数を登録する */
    once: (callback: (arg: T) => void) => {
        removeListener: () => void;
        disposer: (disposer: EventDisposer) => void;
    };
    /**
     * イベントが起きた時に Promise が resolve される
     * @param timeLimit ms
     */
    asPromise: (timeLimit?: number) => Promise<T>;
    /**
     * イベントが起きた時に実行される boolean を返す関数を登録する。
     * 登録した関数が true を返した時に Promise が resolve される
     * */
    watch: (callback: (arg: T) => boolean | undefined | null, timeLimit?: number) => Promise<T>;
    /**@internal */
    get length(): number;
}
/**@internal */
export declare class Events {
    events: Event<any>[];
    make<T extends any>(): Event<T>;
    dispose(): void;
}
/**@internal */
export declare class EventDisposer {
    private _disposer;
    push(disposer: () => void): void;
    dispose(): void;
}
//# sourceMappingURL=event.d.ts.map