type AnyFunc = (...args: ReadonlyArray) => any; const debounce = ( func: T, delay: number, ): ((...args: Parameters) => void) & { clear: () => void; } => { let timer: any; const wrapper = (...args: ReadonlyArray) => { clearTimeout(timer); timer = setTimeout(() => { func(...args); }, delay); }; wrapper.clear = () => { clearTimeout(timer); }; return wrapper; }; export default debounce;