12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- 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 {};
|