once

최초 한번의 함수 호출만 허용

function once<A extends any[], R, T>(
  fn: (this: T, ...args: A) => R
): (this: T, ...args: A) => R | undefined {
  let done = false;
  return function (this: T, ...args: A) {
    return done
      ? undefined
      : ((done = true), fn.apply(this, args));
  };
}

Last updated