export default function debounce( func: (args: T[]) => void, timeout: number, ): (arg: T) => void { let timer: ReturnType; let args: T[] = []; return (arg: T) => { args.push(arg); clearTimeout(timer); timer = setTimeout(() => { const argscopy = args; args = []; func(argscopy); }, timeout); }; }