export type ProxyOptions = {
    get?: boolean;
    set?: boolean;
    configurable?: boolean;
    enumerable?: boolean;
    getDefault?: any;
    setDefault?: any;
};
/**
 * 通过把值转换成JSON字符来判断是否相等
 *
 * @remarks
 * - 方法能用于判断对象的内容是否相等，相等的条件是：这2个对象拥有相同的属性 和 属性值，且属性及属性的属性 的添加顺序是一致的；即：当两个对象的拥有相同的属性和属性值时，如果属性的定义的顺序不同，该方法会返回 false；
 * - 该方法依赖于 JSON.stringify() 的逻辑；
 */
export declare function isEqualByJSON(value1: any, value2: any): boolean;
/**
 * 多次遍历、分批循环；可以把一个大遍历分成若干个小遍历来完成；
 *
 * @param mLoopOpts - 选项对象
 * @returns 停止循环的函数；调用该函数，会终止正在进行的循环
 */
export declare function multipleLoop<StopInfo, ThisValue>(mLoopOpts: {
    loopCall: (this: ThisValue, index: number, stepCount: number, total: number) => StopInfo;
    complete?: (this: ThisValue, stopInfo: StopInfo, index: number, stepCount: number, total: number) => void;
    stepComplete?: (this: ThisValue, index: number, stepCount: number, total: number) => StopInfo;
    thisValue?: ThisValue;
    total?: number;
    step?: number;
    delay?: number;
}): (stopInfo?: StopInfo) => void;
declare global {
    interface Array<T> {
        /**
         * 多次遍历、分批循环；可以把一个大遍历分成若干个小遍历来完成；
         *
         * @param mLoopOpts - 选项对象
         * @returns 停止循环的函数
         */
        multipleLoop<StopInfo, ThisValue>(mLoopOpts: {
            loopCall: (this: ThisValue, currentValue: T, index: number, stepCount: number, arr: T[]) => StopInfo;
            complete?: (this: ThisValue, stopInfo: StopInfo, index: number, stepCount: number, arr: T[]) => void;
            stepComplete?: (this: ThisValue, index: number, stepCount: number, arr: T[]) => StopInfo;
            thisValue?: ThisValue;
            step?: number;
            delay?: number;
        }): (stopInfo?: StopInfo) => void;
    }
}
/**
 * 对 iterable 进行安全的迭代；与 for...of 的区别是：safelyIterate 能保证迭代过程不会受 operation 中的行为影响从而能迭代每一个元素；
 *
 * @param iterable - 可迭代的对象
 * @param operation - 执行的操作，返回值表示是否过滤出该元素
 * @param thisValue - 操作 operation 的 this 值，默认值是 iterable
 * @returns 返回被 operation 过滤出的元素
 */
export declare function safelyIterate<T, ThisValue>(iterable: Iterable<T>, operation: (this: ThisValue, currentValue: T, currentIndex: number, iterable: Iterable<T>) => any, thisValue?: ThisValue): T[];
type ListenablePropOpts<T> = {
    ready?: string;
    noEvent?: boolean;
    event?: string;
    newValueKey?: string;
    oldValueKey?: string;
    getDefault?: (this: T, thisValue: T) => any;
};
/**
 * 定义可监听的属性
 *
 * @param obj - 要在其上定义属性的对象
 * @param prop - 要定义的属性的名称
 * @param options - 配置选项
 * @returns 被传递给函数的对象
 */
export declare function defineListenableProperty<T extends object>(obj: T, prop: string, options?: ListenablePropOpts<T>): any;
/**
 * 批量定义可监听的属性
 *
 * @param obj - 要在其上定义属性的对象
 * @param props - 属性配置对象或属性名数组
 * @param options - 当 props 为数组时的配置选项
 * @returns 被传递给函数的对象
 */
export declare function defineListenableProperties<T extends object>(obj: T, props: {
    [prop: string]: ListenablePropOpts<T>;
} | string[], options?: ListenablePropOpts<T>): any;
/**
 * 定义可监听属性的 getter；该方法一般经常用于：一些可监听属性在被定义时，还不能定义 getDefault 选项，只能在稍后某个时刻定义 getDefault 选项，此时便可用此函数来简化重新定义 getter 的操作；
 *
 * @param obj - 要在其上定义属性的对象
 * @param prop - 要定义的属性的名称
 * @param getDefault - 在获取 prop 属性的值时，如果 prop 属性的值不存在，则会通过该函数获取默认的值
 * @param asGetter - 是否将 getDefault 作为 getter
 */
export declare function defineListenablePropertyGetter<T extends object>(obj: T, prop: string, getDefault?: (this: T, thisValue: T) => any, asGetter?: boolean): void;
/**
 * 生成唯一的标识符
 *
 * @returns 唯一标识符字符串
 */
export declare function createUniqueIdentifier(): string;
declare global {
    interface ControllablePromise<T> extends Promise<T> {
        resolve(value?: T | PromiseLike<T>): void;
        reject(reason?: any): void;
        clearAdditions(): void;
    }
}
/**
 * 创建外部可控制的改变 Promise 状态的 Promise 对象；该 Promise 对象在状态未完成之前，会有 resolve、reject、clearAdditions 三个方法，当 Promise 的状态完成时，这三个方法会自动被删除；
 *
 * @param executor - executor 是带有 resolve 和 reject 两个参数的函数
 * @param statusCompletesImmediately - 该参数表示在 executor 函数中是否会立即（同步）调用 resolve 或 reject
 * @returns 带有 resolve、reject 和 clearAdditions 三个方法的 Promise 实例
 */
export declare function createControllablePromise<T>(executor?: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void, statusCompletesImmediately?: boolean): ControllablePromise<T>;
/**
 * 定义代理属性；给对象 proxy 增加能够代理 target 对象的属性 prop；
 * 当在访问或配置 proxy 对象上的 prop 属性时，会将操作转发到 target 对象的 prop 属性；
 *
 * @param proxy - 会在该对象上添加代理属性 prop
 * @param target - 被代理的对象
 * @param prop - 代理属性的名字
 * @param options - 代理属性的配置选项
 * @returns 传递给函数的代理对象 proxy
 */
export declare function defineProxyProperty(proxy: object, target: object, prop: string, options?: ProxyOptions): any;
/**
 * 批量定义代理属性
 *
 * @param proxy - 会在该对象上添加代理属性
 * @param target - 被代理的对象
 * @param props - 代理属性名数组或属性配置对象
 * @param options - 当 props 为数组时的配置选项
 * @returns 传递给函数的代理对象 proxy
 */
export declare function defineProxyProperties(proxy: object, target: object, props: string[] | {
    [prop: string]: ProxyOptions;
}, options?: ProxyOptions): any;
export {};
//# sourceMappingURL=oriTools.d.ts.map