declare namespace onetime { interface Options { /** Throw an error when called more than once. @default false */ throw?: boolean; } } declare const onetime: { /** Ensure a function is only called once. When called multiple times it will return the return value from the first call. @param fn - Function that should only be called once. @returns A function that only calls `fn` once. @example ``` import onetime = require('onetime'); let i = 0; const foo = onetime(() => ++i); foo(); //=> 1 foo(); //=> 1 foo(); //=> 1 onetime.callCount(foo); //=> 3 ``` */ <ArgumentsType extends unknown[], ReturnType>( fn: (...arguments: ArgumentsType) => ReturnType, options?: onetime.Options ): (...arguments: ArgumentsType) => ReturnType; /** Get the number of times `fn` has been called. @param fn - Function to get call count from. @returns A number representing how many times `fn` has been called. @example ``` import onetime = require('onetime'); const foo = onetime(() => {}); foo(); foo(); foo(); console.log(onetime.callCount(foo)); //=> 3 ``` */ callCount(fn: (...arguments: any[]) => unknown): number; // TODO: Remove this for the next major release default: typeof onetime; }; export = onetime;