export default function debounce void>( fn: T, delay: number, ): (...args: Parameters) => void { let timeout: ReturnType; return function (this: ThisParameterType, ...args: Parameters) { clearTimeout(timeout); timeout = setTimeout(() => fn.apply(this, args), delay); }; }