|  | type RemoveFromTuple< | 
						
						
							|  |   Tuple extends unknown[], | 
						
						
							|  |   RemoveCount extends number, | 
						
						
							|  |   Index extends 1[] = [] | 
						
						
							|  | > = Index["length"] extends RemoveCount | 
						
						
							|  |   ? Tuple | 
						
						
							|  |   : Tuple extends [first: unknown, ...infer Rest] | 
						
						
							|  |   ? RemoveFromTuple<Rest, RemoveCount, [...Index, 1]> | 
						
						
							|  |   : Tuple; | 
						
						
							|  | 
 | 
						
						
							|  | type ConcatTuples< | 
						
						
							|  |   Prefix extends unknown[], | 
						
						
							|  |   Suffix extends unknown[] | 
						
						
							|  | > = [...Prefix, ...Suffix]; | 
						
						
							|  | 
 | 
						
						
							|  | type ReplaceThis<T, NewThis> = T extends (this: infer OldThis, ...args: infer A) => infer R | 
						
						
							|  |   ? (this: NewThis, ...args: A) => R | 
						
						
							|  |   : never; | 
						
						
							|  | 
 | 
						
						
							|  | type BindFunction< | 
						
						
							|  |   TThis, | 
						
						
							|  |   T extends (this: TThis, ...args: any[]) => any, // Allow specific types to propagate | 
						
						
							|  |   TBoundArgs extends unknown[], | 
						
						
							|  |   ReceiverBound extends boolean | 
						
						
							|  | > = ReceiverBound extends true | 
						
						
							|  |   ? (...args: RemoveFromTuple<Parameters<T>, TBoundArgs["length"] & number>) => ReturnType<ReplaceThis<T, TThis>> | 
						
						
							|  |   : (...args: ConcatTuples<[TThis], RemoveFromTuple<Parameters<T>, TBoundArgs["length"] & number>>) => ReturnType<T>; | 
						
						
							|  | 
 | 
						
						
							|  | declare function callBind< | 
						
						
							|  |   TThis, | 
						
						
							|  |   T extends (this: TThis, ...args: any[]) => any, | 
						
						
							|  |   TBoundArgs extends Partial<Parameters<T>> | 
						
						
							|  | >( | 
						
						
							|  |   args: [fn: T, thisArg: TThis, ...boundArgs: TBoundArgs] | 
						
						
							|  | ): BindFunction<TThis, T, TBoundArgs, true>; | 
						
						
							|  | 
 | 
						
						
							|  | declare function callBind< | 
						
						
							|  |   TThis, | 
						
						
							|  |   T extends (this: TThis, ...args: any[]) => any, | 
						
						
							|  |   TBoundArgs extends Partial<Parameters<T>> | 
						
						
							|  | >( | 
						
						
							|  |   args: [fn: T, ...boundArgs: TBoundArgs] | 
						
						
							|  | ): BindFunction<TThis, T, TBoundArgs, false>; | 
						
						
							|  | 
 | 
						
						
							|  | export as namespace callBind; | 
						
						
							|  | export = callBind;
 |