declare namespace uncurryThis { type UncurryThis unknown> = (self: ThisParameterType, ...args: Parameters) => ReturnType; type UncurryThisStaticApply unknown> = (self: ThisParameterType, args: Parameters) => ReturnType; type StaticCall unknown> = (...args: Parameters) => ReturnType; type StaticApply unknown> = (args: Parameters) => ReturnType; type UncurryMethod = O[K] extends (this: infer U, ...args: infer A) => infer R ? (self: unknown extends U ? T : U, ...args: A) => R : never; type UncurryMethodApply = O[K] extends (this: infer U, ...args: infer A) => infer R ? (self: unknown extends U ? T : U, args: A) => R : never; type UncurryGetter = (self: T) => O[K]; type UncurrySetter = (self: T, value: O[K]) => void; } declare const uncurryThis: any>(fn: T) => uncurryThis.UncurryThis; export = uncurryThis;