export default function debounce>( fn: (...args: TArgs) => unknown, delay: number, ): (...args: TArgs) => void { let timeout: NodeJS.Timeout | undefined | null; return function (...args: TArgs) { if (timeout) { clearTimeout(timeout); } timeout = setTimeout(() => { timeout = null; fn(...args); }, delay); }; }