declare namespace delay { interface ClearablePromise extends Promise { /** Clears the delay and settles the promise. */ clear(): void; } /** Minimal subset of `AbortSignal` that delay will use if passed. This avoids a dependency on dom.d.ts. The dom.d.ts `AbortSignal` is compatible with this one. */ interface AbortSignal { readonly aborted: boolean; addEventListener( type: 'abort', listener: () => void, options?: {once?: boolean} ): void; removeEventListener(type: 'abort', listener: () => void): void; } interface Options { /** An optional AbortSignal to abort the delay. If aborted, the Promise will be rejected with an AbortError. */ signal?: AbortSignal; } } type Delay = { /** Create a promise which resolves after the specified `milliseconds`. @param milliseconds - Milliseconds to delay the promise. @returns A promise which resolves after the specified `milliseconds`. */ (milliseconds: number, options?: delay.Options): delay.ClearablePromise; /** Create a promise which resolves after the specified `milliseconds`. @param milliseconds - Milliseconds to delay the promise. @returns A promise which resolves after the specified `milliseconds`. */ ( milliseconds: number, options?: delay.Options & { /** Value to resolve in the returned promise. */ value: T; } ): delay.ClearablePromise; /** Create a promise which resolves after a random amount of milliseconds between `minimum` and `maximum` has passed. Useful for tests and web scraping since they can have unpredictable performance. For example, if you have a test that asserts a method should not take longer than a certain amount of time, and then run it on a CI, it could take longer. So with `.range()`, you could give it a threshold instead. @param minimum - Minimum amount of milliseconds to delay the promise. @param maximum - Maximum amount of milliseconds to delay the promise. @returns A promise which resolves after a random amount of milliseconds between `maximum` and `maximum` has passed. */ range( minimum: number, maximum: number, options?: delay.Options & { /** Value to resolve in the returned promise. */ value: T; } ): delay.ClearablePromise; // TODO: Allow providing value type after https://github.com/Microsoft/TypeScript/issues/5413 is resolved. /** Create a promise which rejects after the specified `milliseconds`. @param milliseconds - Milliseconds to delay the promise. @returns A promise which rejects after the specified `milliseconds`. */ reject( milliseconds: number, options?: delay.Options & { /** Value to reject in the returned promise. */ value?: unknown; } ): delay.ClearablePromise; }; declare const delay: Delay & { // The types are intentionally loose to make it work with both Node.js and browser versions of these methods. createWithTimers(timers: { clearTimeout: (timeoutId: any) => void; setTimeout: (callback: (...args: any[]) => void, milliseconds: number, ...args: any[]) => unknown; }): Delay; // TODO: Remove this for the next major release. default: typeof delay; }; export = delay;