export function debounce( callback: (...args: T) => PromiseLike | U, wait: number ) { let timer: ReturnType; return (...args: T): Promise => { clearTimeout(timer); return new Promise((resolve) => { timer = setTimeout(() => resolve(callback(...args)), wait); }); }; }