tweak-tools
Version:
Tweak your React projects until awesomeness
16 lines (12 loc) • 476 B
text/typescript
export const debounce = <F extends Function>(callback: F, wait: number, immediate = false) => {
let timeout: number = 0
return function () {
const args = arguments as any
const callNow = immediate && !timeout
// @ts-expect-error
const next = () => callback.apply(this, args)
window.clearTimeout(timeout)
timeout = window.setTimeout(next, wait)
if (callNow) next()
} as F extends (...args: infer A) => infer B ? (...args: A) => B : never
}