typelab / utils / FunctionMerge
type FunctionMerge<Target, Source, Z> = [Target, Source] extends [Fn<infer TargetParams, infer TargetReturn>, Fn<infer SourceParams, infer SourceReturn>] ? (...param) => ObjectMerge<TargetReturn, SourceReturn, Z> : never;Merges the parameter and return types of Source into Target.
Use `ArrayMerge` for the parameter type and `ObjectMerge` for the return type.
- If
TargetorSourceis notFunction, it returnsnever.
| Type Parameter | Default type | Description |
|---|---|---|
|
|
‐ |
The target |
|
|
‐ |
The source |
|
|
|
‐ |
A new Function combining parameter and return types from both Target and Source.
type Obj1 = { a: string; b: { a: string } };
type Obj2 = { a: number; b: { b: number } };
// (param_0: string | number, param_1: string) => { a: string | number; b: { a: string; } | { b: number; }; }
type Shallow = FunctionMerge<(...param: [string, string]) => Obj1, (...param: [number]) => Obj2, 'shallow'>;
// (param_0: string | number, param_1: string) => { a: string | number; b: { a: string; b: number; }; }
type Deep = FunctionMerge<(...param: [string, string]) => Obj1, (...param: [number]) => Obj2, 'deep'>;