import { DelayedExecutorType } from "./types/DelayedExecutorType";
/**
 * Extend utilities
 */
export declare namespace ExtendUtils {
    /**
     * Apply mixins, official suggested method
     * https://www.typescriptlang.org/docs/handbook/mixins.html#understanding-the-sample
     * @param derivedCtor Mixin target class
     * @param baseCtors Mixin base classes
     * @param override Override or not
     */
    function applyMixins(derivedCtor: any, baseCtors: any[], override?: boolean): void;
    /**
     * Create delayed executor
     * @param func Function
     * @param delayMiliseconds Delay miliseconds
     * @returns Result
     */
    function delayedExecutor<P extends any[]>(func: (...args: P) => void, delayMiliseconds: number): DelayedExecutorType<P>;
    /**
     * Promise handler to catch error
     * @param promise Promise
     */
    const promiseHandler: (promise: Promise<unknown>) => Promise<any[] | unknown[]>;
    /**
     * Delay promise
     * @param delay Delay miniseconds
     */
    function sleep(delay?: number): Promise<void>;
    /**
     * Wait for condition meets and execute callback
     * requestAnimationFrame to replace setTimeout
     * @param callback Callback
     * @param checkReady Check ready, when it's a number as miliseconds, similar to setTimeout
     * @returns cancel callback
     */
    function waitFor(callback: () => void, checkReady: ((spanTime: number) => boolean) | number): () => void;
    /**
     * Repeat interval for callback
     * @param callback Callback
     * @param miliseconds Miliseconds
     * @returns cancel callback
     */
    function intervalFor(callback: () => void, miliseconds: number): () => void;
}
