export declare type SchedulerEventMapping = {
    error: Error;
    "before-run": void;
    "after-run": void;
    stopped: void;
    starting: void;
};
export declare type SchedulerEventName = keyof SchedulerEventMapping;
declare type Callback<T> = () => T;
declare type ParamCallback<P, T> = (p: P) => T;
export declare class Scheduler {
    private interval;
    private delay;
    private onDelay?;
    private onSchedule?;
    private cb?;
    private readonly event;
    /**
     * @param interval time in millisecond
     * @param delay time in millisecond
     */
    constructor(interval: number, delay?: number);
    on<K extends SchedulerEventName, T extends SchedulerEventMapping[K]>(type: K, cb: ParamCallback<T, void>): void;
    schedule(cb: Callback<void | Promise<void>>): void;
    updateTime(interval?: number, delay?: number): void;
    /**
     * stop scheduler if it running and start new process
     */
    restart(): void;
    /**
     * return true if start the sehedule include when waiting for delay time
     */
    isStarting(): boolean;
    /**
     * return true if and only if scheduler start, when delay time will return false
     */
    isRunning(): boolean;
    /**
     * return true if `schedule()` has been called
     */
    isStartable(): boolean;
    /**
     * stop schedule process and delay process
     */
    stop(): void;
    /**
     * remove all saved data
     */
    clear(): void;
}
export {};
//# sourceMappingURL=Scheduler.d.ts.map