export declare type PredicateCallback = (value: T) => unknown; export declare type PickObject = Pick>; /** deep partial */ export declare type DeepPartial = T extends object ? { [P in keyof T]?: DeepPartial; } : T; /** Constructs a type by picking restricted object value */ export declare type PickRestrictedObject = Pick; /** * pick union type * * @example * * PickUnion<{ a: number, b: string }, 'a' | 'b'> * * // => { a: number } | { b: string } */ export declare type PickUnion = K extends K ? { [P in K]: T[P]; } : never; export declare type AddStringPrefix = `${P}${Capitalize}`; /** * add prefix * * @example * * AddPrefix<{ ob: string, cb: number }, 'My'> * * // => { MyOb: string, MyCb: number } * * AddPrefix<'func', 'My'> * * // => 'MyFunc' */ export declare type AddPrefix = T extends object ? { [P in keyof T as AddStringPrefix]: T[P]; } : AddStringPrefix; /** * partial with optional * * @example * * PartialOptional<{ a: string; b: number }, 'a'> * * // => { a?: string; b: number } */ export declare type PartialOptional = Omit & Partial>; export declare type ObjectLike = { [key: string]: unknown; }; export declare type Values = T[keyof T]; declare type UnionToFn = (T extends unknown ? (k: () => T) => void : never) extends ((k: infer R) => void) ? R : never; export declare type UnionToTuple = UnionToFn extends () => infer R ? Exclude extends never ? [...P, R] : UnionToTuple, [...P, R]> : never; /** * @internal */ declare type ObjectTuple = K extends [infer First, ...infer Rest] ? First extends keyof T ? K['length'] extends 1 ? [{ [key in First]: T[First]; }] : Rest extends (keyof T)[] ? [...ObjectTuple, { [key in First]: T[First]; }] : never : never : never; /** * split a `ObjectLike` into array. * * @example */ export declare type SplitObject = UnionToTuple extends (keyof T)[] ? ObjectTuple> : never; declare type Copy = { [P in keyof T]: T[P]; }; export declare type DeepAssignWith = T extends ObjectLike ? U extends [infer First, ...infer Rest] ? Values extends ObjectLike ? keyof First extends keyof T ? Copy & { [key in keyof First]: DeepAssign>, Values>; }, Rest>> : never : Copy & First, Rest>> : T : never; export declare type DeepAssign = A extends ObjectLike ? B extends ObjectLike ? DeepAssignWith> : A : never; export {};