type Timer = ReturnType; function debounce any>( func: T, delay: number ): (...args: Parameters) => void { let timer: Timer; return function (this: ThisParameterType, ...args: Parameters): void { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { func.apply(this, args); }, delay); }; } export default debounce;