type Procedure = (...args: any[]) => any; export default function (f: F, duration: number) { let timeout: ReturnType | null = null; return function (...args: Parameters) { if (timeout !== null) { clearTimeout(timeout); timeout = null; } timeout = setTimeout(() => f(...args), duration); }; }