UNPKG

@modern-kit/utils

Version:
44 lines (42 loc) 2 kB
interface ThrottleOptions { signal?: AbortSignal; leading?: boolean; trailing?: boolean; } interface ThrottledFunction<F extends (...args: any[]) => void> { (...args: Parameters<F>): void; cancel: () => void; flush: () => void; } /** * @description 스로틀링된 함수를 생성합니다. * * 스로틀링된 함수는 첫 번째 호출은 즉시 실행 되고, 이후 지연 시간(`wait` 밀리초) 간격으로만 실행됩니다. * 지정된 시간 간격마다 최대 한 번만 실행하여 호출 빈도를 제한합니다. * * @param {F} func - 스로틀링할 함수입니다. * @param {number} wait - 스로틀링 간격(밀리초)입니다. * @param {ThrottleOptions} options - 스로틀링 옵션입니다. * @param {AbortSignal} options.signal - 스로틀링 취소를 위한 AbortSignal입니다. * @param {boolean} options.leading - 첫 번째 호출을 실행할지 여부입니다. * @param {boolean} options.trailing - 마지막 호출을 실행할지 여부입니다. * * @returns {ThrottledFunction<F>} `cancel` 메서드가 포함된 새로운 스로틀링된 함수를 반환합니다. * - `cancel` 메서드는 스로틀링된 함수의 대기 중인 실행을 취소합니다. * - `flush` 메서드는 대기 중인 실행이 있는 경우 스로틀링된 함수를 즉시 실행합니다. * * @example * const throttled = throttle(func, 1000); * throttled(); // 즉시 실행 * throttled(); // 이후 호출은 지연 시간 간격으로 실행됩니다. * * @example * // AbortSignal 사용 예시 * const controller = new AbortController(); * controller.abort(); // 스로틀링된 함수 호출을 취소합니다. * * const throttled = throttle(func, 1000, { signal: controller.signal }); * throttled(); // 호출되지 않습니다. */ declare function throttle<F extends (...args: any[]) => void>(func: (...args: any[]) => void, wait: number, options?: ThrottleOptions): ThrottledFunction<F>; export { throttle };