/** * Utilitaire de debounce partage. * * Retarde l'execution d'une fonction : chaque appel reset un timer et * l'execution reelle n'a lieu qu'apres `delay` ms sans nouvelle invocation. * Utile pour eviter un spam d'appels reseau sur un champ de recherche * (une requete par touche -> une seule requete apres la derniere frappe). */ export function debounce void>(fn: T, delay: number): T { let timer: ReturnType | null = null return ((...args: Parameters) => { if (null !== timer) clearTimeout(timer) timer = setTimeout(() => fn(...args), delay) }) as T }