@lesnoypudge/utils
Version:
lesnoypudge's utils
16 lines (15 loc) • 1.19 kB
TypeScript
import { T } from '@lesnoypudge/types-utils-base/namespace';
export declare namespace patch {
type GetNamesOfMethods<_ObjectToPatch extends object> = keyof T.ConditionalPick<_ObjectToPatch, T.AnyFunction>;
type GetPatchedMethod<_ObjectToPatch extends object, _MethodName extends GetNamesOfMethods<_ObjectToPatch>> = (_ObjectToPatch[_MethodName] extends T.AnyFunction ? _ObjectToPatch[_MethodName] : never);
type GetPatchedMethodFactory<_ObjectToPatch extends object, _MethodName extends GetNamesOfMethods<_ObjectToPatch>, _PatchedMethod extends patch.GetPatchedMethod<_ObjectToPatch, _MethodName>> = (_PatchedMethod extends never ? never : (originalMethod: _PatchedMethod) => _PatchedMethod);
}
/**
* Replaces desired method with custom one.
*/
export declare const patch: <_ObjectToPatch extends object, _MethodName extends patch.GetNamesOfMethods<_ObjectToPatch>, _PatchedMethod extends patch.GetPatchedMethod<_ObjectToPatch, _MethodName>>(options: {
objectToPatch: _ObjectToPatch;
providedThis: _ObjectToPatch;
methodName: _MethodName;
patchedMethodFactory: patch.GetPatchedMethodFactory<_ObjectToPatch, _MethodName, _PatchedMethod>;
}) => () => void;