| type CallbackFunc<T extends unknown[]> = (...args: T) => void | |
| export function debounce<T extends unknown[]>( | |
| func: CallbackFunc<T>, | |
| wait: number, | |
| ): (...args: T) => void { | |
| let timeoutId: ReturnType<typeof setTimeout> | undefined | |
| return (...args: T) => { | |
| const later = () => { | |
| clearTimeout(timeoutId) | |
| func(...args) | |
| } | |
| clearTimeout(timeoutId) | |
| timeoutId = setTimeout(later, wait) | |
| } | |
| } | |