( fn: T, delay: number )
| 451 | * @returns Debounced function |
| 452 | */ |
| 453 | export function debounce<T extends (...args: unknown[]) => unknown>( |
| 454 | fn: T, |
| 455 | delay: number |
| 456 | ): (...args: Parameters<T>) => void { |
| 457 | let timeoutId: ReturnType<typeof setTimeout> | null = null; |
| 458 | |
| 459 | return (...args: Parameters<T>) => { |
| 460 | if (timeoutId) { |
| 461 | clearTimeout(timeoutId); |
| 462 | } |
| 463 | timeoutId = setTimeout(() => { |
| 464 | fn(...args); |
| 465 | timeoutId = null; |
| 466 | }, delay); |
| 467 | }; |
| 468 | } |
| 469 | |
| 470 | /** |
| 471 | * Throttle a function |