/** * @param fn - The function to debounce * @param delay - The delay in milliseconds * @returns A debounced version of the function */ export function debounce) => void>( fn: T, delay: number ): (...args: Parameters) => void { let timeoutId: ReturnType | null = null; return (...args: Parameters) => { if (timeoutId) { clearTimeout(timeoutId); } timeoutId = setTimeout(() => { fn(...args); timeoutId = null; }, delay); }; }