declare type ThrottleFunction = (this: unknown, ...args: unknown[]) => void; 
 | 
export declare type ThrottleType = 'fixRate' | 'debounce'; 
 | 
export interface ThrottleController { 
 | 
    clear(): void; 
 | 
    debounceNextCall(debounceDelay: number): void; 
 | 
} 
 | 
/** 
 | 
 * @public 
 | 
 * @param {(Function)} fn 
 | 
 * @param {number} [delay=0] Unit: ms. 
 | 
 * @param {boolean} [debounce=false] 
 | 
 *        true: If call interval less than `delay`, only the last call works. 
 | 
 *        false: If call interval less than `delay, call works on fixed rate. 
 | 
 * @return {(Function)} throttled fn. 
 | 
 */ 
 | 
export declare function throttle<T extends ThrottleFunction>(fn: T, delay?: number, debounce?: boolean): T & ThrottleController; 
 | 
/** 
 | 
 * Create throttle method or update throttle rate. 
 | 
 * 
 | 
 * @example 
 | 
 * ComponentView.prototype.render = function () { 
 | 
 *     ... 
 | 
 *     throttle.createOrUpdate( 
 | 
 *         this, 
 | 
 *         '_dispatchAction', 
 | 
 *         this.model.get('throttle'), 
 | 
 *         'fixRate' 
 | 
 *     ); 
 | 
 * }; 
 | 
 * ComponentView.prototype.remove = function () { 
 | 
 *     throttle.clear(this, '_dispatchAction'); 
 | 
 * }; 
 | 
 * ComponentView.prototype.dispose = function () { 
 | 
 *     throttle.clear(this, '_dispatchAction'); 
 | 
 * }; 
 | 
 * 
 | 
 */ 
 | 
export declare function createOrUpdate<T, S extends keyof T, P = T[S]>(obj: T, fnAttr: S, rate: number, throttleType: ThrottleType): P extends ThrottleFunction ? P & ThrottleController : never; 
 | 
/** 
 | 
 * Clear throttle. Example see throttle.createOrUpdate. 
 | 
 */ 
 | 
export declare function clear<T, S extends keyof T>(obj: T, fnAttr: S): void; 
 | 
export {}; 
 |