Sha256: 14be139e0f6d380a3d24aaf9b67972add107bea35cf7f2b1b1febac6553c3ede

Contents?: true

Size: 1.5 KB

Versions: 28

Compression:

Stored size: 1.5 KB

Contents

import type {IsUnknown} from './is-unknown';

/**
Create a function type with a return type of your choice and the same parameters as the given function type.

Use-case: You want to define a wrapped function that returns something different while receiving the same parameters. For example, you might want to wrap a function that can throw an error into one that will return `undefined` instead.

@example
```
import type {SetReturnType} from 'type-fest';

type MyFunctionThatCanThrow = (foo: SomeType, bar: unknown) => SomeOtherType;

type MyWrappedFunction = SetReturnType<MyFunctionThatCanThrow, SomeOtherType | undefined>;
//=> type MyWrappedFunction = (foo: SomeType, bar: unknown) => SomeOtherType | undefined;
```

@category Function
*/
export type SetReturnType<Function_ extends (...arguments_: any[]) => any, TypeToReturn> =
	// Just using `Parameters<Fn>` isn't ideal because it doesn't handle the `this` fake parameter.
	Function_ extends (this: infer ThisArgument, ...arguments_: infer Arguments) => any ? (
		// If a function did not specify the `this` fake parameter, it will be inferred to `unknown`.
		// We want to detect this situation just to display a friendlier type upon hovering on an IntelliSense-powered IDE.
		IsUnknown<ThisArgument> extends true ? (...arguments_: Arguments) => TypeToReturn : (this: ThisArgument, ...arguments_: Arguments) => TypeToReturn
	) : (
		// This part should be unreachable, but we make it meaningful just in caseā€¦
		(...arguments_: Parameters<Function_>) => TypeToReturn
	);

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
clapton-0.0.26 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.25 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.24 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.23 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.22 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.21 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.20 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.19 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.18 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.17 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.16 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.15 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.14 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.13 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.12 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.11 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.10 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.9 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.8 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts
clapton-0.0.7 lib/clapton/javascripts/node_modules/type-fest/source/set-return-type.d.ts