export function debounce(fn: (...args: any[]) => any, delay: number) { let timer: ReturnType; const result = function (...args: Parameters) { clearTimeout(timer); timer = setTimeout(() => fn(...args), delay); }; result.cancel = function () { clearTimeout(timer); }; return result; }