~/about/gist/debounce-ts.md

Search blog, notes, and gist

    ↑↓ navigate openesc close
    ID
    about/gist/debounce-ts

    A tiny typed debounce

    Jul 12, 2026#typescript#utils

    I reach for this constantly — a debounce that preserves the wrapped function’s parameter types:

    export function debounce<A extends unknown[]>(
      fn: (...args: A) => void,
      ms = 300,
    ) {
      let timer: ReturnType<typeof setTimeout>;
      return (...args: A) => {
        clearTimeout(timer);
        timer = setTimeout(() => fn(...args), ms);
      };
    }

    Usage:

    const onSearch = debounce((q: string) => fetchResults(q), 250);