自己写的一个TS版本的防抖函数
简单自测了一下,应该是可以正常使用的,有没有同学可以不使用any情况下写一版
export const debounce = <T extends (...args: any) => any>(
fn: T,
time?: number,
immediate?: boolean
): ((...args: any) => any) => {
let timeoutId: null | number
let defaultImmediate = immediate || false
let delay = time || 300
return (...args: any) => {
if (defaultImmediate) {
fn.apply(this, args) // 确保引用函数的指向正确,并且函数的参数也不变
defaultImmediate = false
return
}
if (timeoutId) {
clearTimeout(timeoutId)
}
timeoutId = setTimeout(() => {
fn.apply(this, args)
timeoutId = null
}, delay)
}
}