index.d.ts 1.18 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
declare const mimicFn: {
	/**
	Make a function mimic another one. It will copy over the properties `name`, `length`, `displayName`, and any custom properties you may have set.

	@param to - Mimicking function.
	@param from - Function to mimic.
	@returns The modified `to` function.

	@example
	```
	import mimicFn = require('mimic-fn');

	function foo() {}
	foo.unicorn = '🦄';

	function wrapper() {
		return foo();
	}

	console.log(wrapper.name);
	//=> 'wrapper'

	mimicFn(wrapper, foo);

	console.log(wrapper.name);
	//=> 'foo'

	console.log(wrapper.unicorn);
	//=> '🦄'
	```
	*/
	<
		ArgumentsType extends unknown[],
		ReturnType,
		FunctionType extends (...arguments: ArgumentsType) => ReturnType
	>(
		to: (...arguments: ArgumentsType) => ReturnType,
		from: FunctionType
	): FunctionType;

	// TODO: Remove this for the next major release, refactor the whole definition to:
	// declare function mimicFn<
	//	ArgumentsType extends unknown[],
	//	ReturnType,
	//	FunctionType extends (...arguments: ArgumentsType) => ReturnType
	// >(
	//	to: (...arguments: ArgumentsType) => ReturnType,
	//	from: FunctionType
	// ): FunctionType;
	// export = mimicFn;
	default: typeof mimicFn;
};

export = mimicFn;