/** 
 | 
 * The `timer` module exposes a global API for scheduling functions to 
 | 
 * be called at some future period of time. Because the timer functions are 
 | 
 * globals, there is no need to call `require('timers')` to use the API. 
 | 
 * 
 | 
 * The timer functions within Node.js implement a similar API as the timers API 
 | 
 * provided by Web Browsers but use a different internal implementation that is 
 | 
 * built around the Node.js [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#setimmediate-vs-settimeout). 
 | 
 * @see [source](https://github.com/nodejs/node/blob/v18.0.0/lib/timers.js) 
 | 
 */ 
 | 
declare module 'timers' { 
 | 
    import { Abortable } from 'node:events'; 
 | 
    import { setTimeout as setTimeoutPromise, setImmediate as setImmediatePromise, setInterval as setIntervalPromise } from 'node:timers/promises'; 
 | 
    interface TimerOptions extends Abortable { 
 | 
        /** 
 | 
         * Set to `false` to indicate that the scheduled `Timeout` 
 | 
         * should not require the Node.js event loop to remain active. 
 | 
         * @default true 
 | 
         */ 
 | 
        ref?: boolean | undefined; 
 | 
    } 
 | 
    let setTimeout: typeof global.setTimeout; 
 | 
    let clearTimeout: typeof global.clearTimeout; 
 | 
    let setInterval: typeof global.setInterval; 
 | 
    let clearInterval: typeof global.clearInterval; 
 | 
    let setImmediate: typeof global.setImmediate; 
 | 
    let clearImmediate: typeof global.clearImmediate; 
 | 
    global { 
 | 
        namespace NodeJS { 
 | 
            // compatibility with older typings 
 | 
            interface Timer extends RefCounted { 
 | 
                hasRef(): boolean; 
 | 
                refresh(): this; 
 | 
                [Symbol.toPrimitive](): number; 
 | 
            } 
 | 
            interface Immediate extends RefCounted { 
 | 
                /** 
 | 
                 * If true, the `Immediate` object will keep the Node.js event loop active. 
 | 
                 * @since v11.0.0 
 | 
                 */ 
 | 
                hasRef(): boolean; 
 | 
                _onImmediate: Function; // to distinguish it from the Timeout class 
 | 
            } 
 | 
            interface Timeout extends Timer { 
 | 
                /** 
 | 
                 * If true, the `Timeout` object will keep the Node.js event loop active. 
 | 
                 * @since v11.0.0 
 | 
                 */ 
 | 
                hasRef(): boolean; 
 | 
                /** 
 | 
                 * Sets the timer's start time to the current time, and reschedules the timer to 
 | 
                 * call its callback at the previously specified duration adjusted to the current 
 | 
                 * time. This is useful for refreshing a timer without allocating a new 
 | 
                 * JavaScript object. 
 | 
                 * 
 | 
                 * Using this on a timer that has already called its callback will reactivate the 
 | 
                 * timer. 
 | 
                 * @since v10.2.0 
 | 
                 * @return a reference to `timeout` 
 | 
                 */ 
 | 
                refresh(): this; 
 | 
                [Symbol.toPrimitive](): number; 
 | 
            } 
 | 
        } 
 | 
        function setTimeout<TArgs extends any[]>(callback: (...args: TArgs) => void, ms?: number, ...args: TArgs): NodeJS.Timeout; 
 | 
        // util.promisify no rest args compability 
 | 
        // tslint:disable-next-line void-return 
 | 
        function setTimeout(callback: (args: void) => void, ms?: number): NodeJS.Timeout; 
 | 
        namespace setTimeout { 
 | 
            const __promisify__: typeof setTimeoutPromise; 
 | 
        } 
 | 
        function clearTimeout(timeoutId: NodeJS.Timeout | string | number | undefined): void; 
 | 
        function setInterval<TArgs extends any[]>(callback: (...args: TArgs) => void, ms?: number, ...args: TArgs): NodeJS.Timer; 
 | 
        // util.promisify no rest args compability 
 | 
        // tslint:disable-next-line void-return 
 | 
        function setInterval(callback: (args: void) => void, ms?: number): NodeJS.Timer; 
 | 
        namespace setInterval { 
 | 
            const __promisify__: typeof setIntervalPromise; 
 | 
        } 
 | 
        function clearInterval(intervalId: NodeJS.Timeout | string | number | undefined): void; 
 | 
        function setImmediate<TArgs extends any[]>(callback: (...args: TArgs) => void, ...args: TArgs): NodeJS.Immediate; 
 | 
        // util.promisify no rest args compability 
 | 
        // tslint:disable-next-line void-return 
 | 
        function setImmediate(callback: (args: void) => void): NodeJS.Immediate; 
 | 
        namespace setImmediate { 
 | 
            const __promisify__: typeof setImmediatePromise; 
 | 
        } 
 | 
        function clearImmediate(immediateId: NodeJS.Immediate | undefined): void; 
 | 
        function queueMicrotask(callback: () => void): void; 
 | 
    } 
 | 
} 
 | 
declare module 'node:timers' { 
 | 
    export * from 'timers'; 
 | 
} 
 |