Files
2025-04-17 16:37:09 +05:30

20 lines
453 B
TypeScript

export function debounce<T extends (...args: any[]) => void>(
fn: T,
delay: number
): T & { cancel: () => void } {
let timeoutId: NodeJS.Timeout;
const debounced = function (this: unknown, ...args: Parameters<T>) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => {
fn.apply(this, args);
}, delay);
} as T & { cancel: () => void };
debounced.cancel = () => {
clearTimeout(timeoutId);
};
return debounced;
}