Debounce in TypeScript
export function debounce<Args extends unknown[]>(
fn: (...args: Args) => void,
wait: number,
) {
let timer: ReturnType<typeof setTimeout> | undefined;
return (...args: Args) => {
clearTimeout(timer);
timer = setTimeout(() => fn(...args), wait);
};
}