import { ExcludeExact, Levels } from './useful'; declare type IsRecursivable = never | T extends (RegExp | Date | Promise) ? false : T extends (...args: any[]) => any ? false : T extends unknown[] ? true : T extends object ? true : false; declare type CommonKeys = keyof T; declare type Keys = T extends unknown ? keyof T : never; declare type NonCommonKeys = Exclude, CommonKeys>; declare type Common = CommonKeys extends infer K1 ? { [K in K1 & CommonKeys]: IsRecursivable extends true ? MergeReduce : T[K]; } : never; declare type NonCommonValue = T extends Partial> ? keyof T extends never ? never : V : never; declare type NonCommon = NonCommonKeys extends infer K1 ? { [K in K1 & NonCommonKeys]?: IsRecursivable extends true ? MergeReduce : NonCommonValue; } : never; declare type Values = T extends T ? { [K in keyof T]: T[K]; } : never; declare type UnionToFuncParam = U extends any ? (k: U) => void : never; declare type UnionFuncParamToIntersection = UnionToFuncParam extends ((k: infer I) => void) ? I : never; declare type ExtractFuncParm = F extends { (a: infer A): void; } ? A : never; declare type SpliceOne = ExcludeExact>; declare type ExtractOne = ExtractFuncParm>>; declare type MergeReduce = Depth extends 0 ? Union : MergeReduceImpl; declare type MergeReducer = Merge; declare type Merge = Values & NonCommon>; declare type MergeReduceImpl = SpliceOne extends never ? MergeReducer, Container, Depth> : MergeReduceImpl, MergeReducer, Container, Depth>, Depth>; export declare type MergeRecursive = MergeReduce; export {};