import _ from 'lodash';
/**
 * lodash库工具类
 */
export declare class lodashUtils {
    constructor();
    static chunk: <T>(array: _.List<T> | null | undefined, size?: number | undefined) => T[][];
    static compact: <T>(array: _.List<_.Falsey | T> | null | undefined) => T[];
    static difference: <T>(array: _.List<T> | null | undefined, ...values: _.List<T>[]) => T[];
    static filter: {
        (collection: string | null | undefined, predicate?: _.StringIterator<boolean> | undefined): string[];
        <T, S extends T>(collection: _.List<T> | null | undefined, predicate: _.ListIteratorTypeGuard<T, S>): S[];
        <T_1>(collection: _.List<T_1> | null | undefined, predicate?: _.ListIterateeCustom<T_1, boolean> | undefined): T_1[];
        <T_2 extends object, S_1 extends T_2[keyof T_2]>(collection: T_2 | null | undefined, predicate: _.ObjectIteratorTypeGuard<T_2, S_1>): S_1[];
        <T_3 extends object>(collection: T_3 | null | undefined, predicate?: _.ObjectIterateeCustom<T_3, boolean> | undefined): T_3[keyof T_3][];
    };
    static find: {
        <T, S extends T>(collection: _.List<T> | null | undefined, predicate: _.ListIteratorTypeGuard<T, S>, fromIndex?: number | undefined): S | undefined;
        <T_1>(collection: _.List<T_1> | null | undefined, predicate?: _.ListIterateeCustom<T_1, boolean> | undefined, fromIndex?: number | undefined): T_1 | undefined;
        <T_2 extends object, S_1 extends T_2[keyof T_2]>(collection: T_2 | null | undefined, predicate: _.ObjectIteratorTypeGuard<T_2, S_1>, fromIndex?: number | undefined): S_1 | undefined;
        <T_3 extends object>(collection: T_3 | null | undefined, predicate?: _.ObjectIterateeCustom<T_3, boolean> | undefined, fromIndex?: number | undefined): T_3[keyof T_3] | undefined;
    };
    static findIndex: <T>(array: _.List<T> | null | undefined, predicate?: _.ListIterateeCustom<T, boolean> | undefined, fromIndex?: number | undefined) => number;
    static forEach: {
        <T>(collection: T[], iteratee?: _.ArrayIterator<T, any> | undefined): T[];
        (collection: string, iteratee?: _.StringIterator<any> | undefined): string;
        <T_1>(collection: _.List<T_1>, iteratee?: _.ListIterator<T_1, any> | undefined): _.List<T_1>;
        <T_2 extends object>(collection: T_2, iteratee?: _.ObjectIterator<T_2, any> | undefined): T_2;
        <T_3, TArray extends T_3[] | null | undefined>(collection: TArray & (T_3[] | null | undefined), iteratee?: _.ArrayIterator<T_3, any> | undefined): TArray;
        <TString extends string | null | undefined>(collection: TString, iteratee?: _.StringIterator<any> | undefined): TString;
        <T_4, TList extends _.List<T_4> | null | undefined>(collection: TList & (_.List<T_4> | null | undefined), iteratee?: _.ListIterator<T_4, any> | undefined): TList;
        <T_5 extends object>(collection: T_5 | null | undefined, iteratee?: _.ObjectIterator<T_5, any> | undefined): T_5 | null | undefined;
    };
    static groupBy: {
        <T>(collection: _.List<T> | null | undefined, iteratee?: _.ValueIteratee<T> | undefined): _.Dictionary<T[]>;
        <T_1 extends object>(collection: T_1 | null | undefined, iteratee?: _.ValueIteratee<T_1[keyof T_1]> | undefined): _.Dictionary<T_1[keyof T_1][]>;
    };
    static includes: <T>(collection: _.Dictionary<T> | _.NumericDictionary<T> | null | undefined, target: T, fromIndex?: number | undefined) => boolean;
    static intersection: <T>(...arrays: (_.List<T> | null | undefined)[]) => T[];
    static isEmpty: {
        <T extends {
            __trapAny: any;
        }>(value?: T | undefined): boolean;
        (value: string): value is "";
        (value: Map<any, any> | Set<any> | _.List<any> | null | undefined): boolean;
        (value: object): boolean;
        <T_1 extends object>(value: T_1 | null | undefined): value is _.EmptyObjectOf<T_1> | null | undefined;
        (value?: any): boolean;
    };
    static isEqual: (value: any, other: any) => boolean;
    static join: (array: _.List<any> | null | undefined, separator?: string | undefined) => string;
    static keyBy: {
        <T>(collection: _.List<T> | null | undefined, iteratee?: _.ValueIterateeCustom<T, _.PropertyName> | undefined): _.Dictionary<T>;
        <T_1 extends object>(collection: T_1 | null | undefined, iteratee?: _.ValueIterateeCustom<T_1[keyof T_1], _.PropertyName> | undefined): _.Dictionary<T_1[keyof T_1]>;
    };
    static last: <T>(array: _.List<T> | null | undefined) => T | undefined;
    static map: {
        <T, TResult>(collection: T[] | null | undefined, iteratee: _.ArrayIterator<T, TResult>): TResult[];
        <T_1, TResult_1>(collection: _.List<T_1> | null | undefined, iteratee: _.ListIterator<T_1, TResult_1>): TResult_1[];
        <T_2>(collection: _.Dictionary<T_2> | _.NumericDictionary<T_2> | null | undefined): T_2[];
        <T_3 extends object, TResult_2>(collection: T_3 | null | undefined, iteratee: _.ObjectIterator<T_3, TResult_2>): TResult_2[];
        <T_4, K extends keyof T_4>(collection: _.Dictionary<T_4> | _.NumericDictionary<T_4> | null | undefined, iteratee: K): T_4[K][];
        <T_5>(collection: _.Dictionary<T_5> | _.NumericDictionary<T_5> | null | undefined, iteratee?: string | undefined): any[];
        <T_6>(collection: _.Dictionary<T_6> | _.NumericDictionary<T_6> | null | undefined, iteratee?: object | undefined): boolean[];
    };
    static orderBy: {
        <T>(collection: _.List<T> | null | undefined, iteratees?: _.Many<_.ListIterator<T, unknown>> | undefined, orders?: _.Many<boolean | "desc" | "asc"> | undefined): T[];
        <T_1>(collection: _.List<T_1> | null | undefined, iteratees?: _.Many<_.ListIteratee<T_1>> | undefined, orders?: _.Many<boolean | "desc" | "asc"> | undefined): T_1[];
        <T_2 extends object>(collection: T_2 | null | undefined, iteratees?: _.Many<_.ObjectIterator<T_2, unknown>> | undefined, orders?: _.Many<boolean | "desc" | "asc"> | undefined): T_2[keyof T_2][];
        <T_3 extends object>(collection: T_3 | null | undefined, iteratees?: _.Many<_.ObjectIteratee<T_3>> | undefined, orders?: _.Many<boolean | "desc" | "asc"> | undefined): T_3[keyof T_3][];
    };
    static partition: {
        <T, U extends T>(collection: _.List<T> | null | undefined, callback: _.ValueIteratorTypeGuard<T, U>): [U[], Exclude<T, U>[]];
        <T_1>(collection: _.List<T_1> | null | undefined, callback: _.ValueIteratee<T_1>): [T_1[], T_1[]];
        <T_2 extends object>(collection: T_2 | null | undefined, callback: _.ValueIteratee<T_2[keyof T_2]>): [T_2[keyof T_2][], T_2[keyof T_2][]];
    };
    static reduce: {
        <T, TResult>(collection: T[] | null | undefined, callback: _.MemoListIterator<T, TResult, T[]>, accumulator: TResult): TResult;
        <T_1, TResult_1>(collection: _.List<T_1> | null | undefined, callback: _.MemoListIterator<T_1, TResult_1, _.List<T_1>>, accumulator: TResult_1): TResult_1;
        <T_2 extends object, TResult_2>(collection: T_2 | null | undefined, callback: _.MemoObjectIterator<T_2[keyof T_2], TResult_2, T_2>, accumulator: TResult_2): TResult_2;
        <T_3>(collection: T_3[] | null | undefined, callback: _.MemoListIterator<T_3, T_3, T_3[]>): T_3 | undefined;
        <T_4>(collection: _.List<T_4> | null | undefined, callback: _.MemoListIterator<T_4, T_4, _.List<T_4>>): T_4 | undefined;
        <T_5 extends object>(collection: T_5 | null | undefined, callback: _.MemoObjectIterator<T_5[keyof T_5], T_5[keyof T_5], T_5>): T_5[keyof T_5] | undefined;
    };
    static reverse: <TList extends _.List<any>>(array: TList) => TList;
    static sample: {
        <T>(collection: _.Dictionary<T> | _.NumericDictionary<T> | null | undefined): T | undefined;
        <T_1 extends object>(collection: T_1 | null | undefined): T_1[keyof T_1] | undefined;
    };
    static shuffle: {
        <T>(collection: _.List<T> | null | undefined): T[];
        <T_1 extends object>(collection: T_1 | null | undefined): T_1[keyof T_1][];
    };
    static size: (collection: string | object | null | undefined) => number;
    static sortBy: {
        <T>(collection: _.List<T> | null | undefined, ...iteratees: _.Many<_.ListIteratee<T>>[]): T[];
        <T_1 extends object>(collection: T_1 | null | undefined, ...iteratees: _.Many<_.ObjectIteratee<T_1>>[]): T_1[keyof T_1][];
    };
    static take: <T>(array: _.List<T> | null | undefined, n?: number | undefined) => T[];
    static takeRight: <T>(array: _.List<T> | null | undefined, n?: number | undefined) => T[];
    static toArray: {
        <T>(value: _.Dictionary<T> | _.NumericDictionary<T> | null | undefined): T[];
        <T_1>(value: T_1): T_1[keyof T_1][];
        (): any[];
    };
    static uniq: <T>(array: _.List<T> | null | undefined) => T[];
    static without: <T>(array: _.List<T> | null | undefined, ...values: T[]) => T[];
    static throttle: <T extends (...args: any) => any>(func: T, wait?: number | undefined, options?: _.ThrottleSettings | undefined) => _.DebouncedFunc<T>;
    static debounce: {
        <T extends (...args: any) => any>(func: T, wait: number | undefined, options: _.DebounceSettingsLeading): _.DebouncedFuncLeading<T>;
        <T_1 extends (...args: any) => any>(func: T_1, wait?: number | undefined, options?: _.DebounceSettings | undefined): _.DebouncedFunc<T_1>;
    };
    static camelCase: (string?: string | undefined) => string;
    static pickBy: {
        <T, S extends T>(object: _.Dictionary<T> | null | undefined, predicate: _.ValueKeyIterateeTypeGuard<T, S>): _.Dictionary<S>;
        <T_1, S_1 extends T_1>(object: _.NumericDictionary<T_1> | null | undefined, predicate: _.ValueKeyIterateeTypeGuard<T_1, S_1>): _.NumericDictionary<S_1>;
        <T_2>(object: _.Dictionary<T_2> | null | undefined, predicate?: _.ValueKeyIteratee<T_2> | undefined): _.Dictionary<T_2>;
        <T_3>(object: _.NumericDictionary<T_3> | null | undefined, predicate?: _.ValueKeyIteratee<T_3> | undefined): _.NumericDictionary<T_3>;
        <T_4 extends object>(object: T_4 | null | undefined, predicate?: _.ValueKeyIteratee<T_4[keyof T_4]> | undefined): Partial<T_4>;
    };
    static merge: {
        <TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
        <TObject_1, TSource1, TSource2>(object: TObject_1, source1: TSource1, source2: TSource2): TObject_1 & TSource1 & TSource2;
        <TObject_2, TSource1_1, TSource2_1, TSource3>(object: TObject_2, source1: TSource1_1, source2: TSource2_1, source3: TSource3): TObject_2 & TSource1_1 & TSource2_1 & TSource3;
        <TObject_3, TSource1_2, TSource2_2, TSource3_1, TSource4>(object: TObject_3, source1: TSource1_2, source2: TSource2_2, source3: TSource3_1, source4: TSource4): TObject_3 & TSource1_2 & TSource2_2 & TSource3_1 & TSource4;
        (object: any, ...otherArgs: any[]): any;
    };
    static countBy: {
        <T>(collection: _.List<T> | null | undefined, iteratee?: _.ValueIteratee<T> | undefined): _.Dictionary<number>;
        <T_1 extends object>(collection: T_1 | null | undefined, iteratee?: _.ValueIteratee<T_1[keyof T_1]> | undefined): _.Dictionary<number>;
    };
    static pick: {
        <T extends object, U extends keyof T>(object: T, ...props: _.Many<U>[]): Pick<T, U>;
        <T_1>(object: T_1 | null | undefined, ...props: _.Many<_.PropertyPath>[]): Partial<T_1>;
    };
    static assign: {
        <TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
        <TObject_1, TSource1, TSource2>(object: TObject_1, source1: TSource1, source2: TSource2): TObject_1 & TSource1 & TSource2;
        <TObject_2, TSource1_1, TSource2_1, TSource3>(object: TObject_2, source1: TSource1_1, source2: TSource2_1, source3: TSource3): TObject_2 & TSource1_1 & TSource2_1 & TSource3;
        <TObject_3, TSource1_2, TSource2_2, TSource3_1, TSource4>(object: TObject_3, source1: TSource1_2, source2: TSource2_2, source3: TSource3_1, source4: TSource4): TObject_3 & TSource1_2 & TSource2_2 & TSource3_1 & TSource4;
        <TObject_4>(object: TObject_4): TObject_4;
        (object: any, ...otherArgs: any[]): any;
    };
    static flatten: <T>(array: _.List<_.Many<T>> | null | undefined) => T[];
    static defaults: {
        <TObject, TSource>(object: TObject, source: TSource): NonNullable<TSource & TObject>;
        <TObject_1, TSource1, TSource2>(object: TObject_1, source1: TSource1, source2: TSource2): NonNullable<TSource2 & TSource1 & TObject_1>;
        <TObject_2, TSource1_1, TSource2_1, TSource3>(object: TObject_2, source1: TSource1_1, source2: TSource2_1, source3: TSource3): NonNullable<TSource3 & TSource2_1 & TSource1_1 & TObject_2>;
        <TObject_3, TSource1_2, TSource2_2, TSource3_1, TSource4>(object: TObject_3, source1: TSource1_2, source2: TSource2_2, source3: TSource3_1, source4: TSource4): NonNullable<TSource4 & TSource3_1 & TSource2_2 & TSource1_2 & TObject_3>;
        <TObject_4>(object: TObject_4): NonNullable<TObject_4>;
        (object: any, ...sources: any[]): any;
    };
    static zip: {
        <T1, T2>(arrays1: _.List<T1>, arrays2: _.List<T2>): [T1 | undefined, T2 | undefined][];
        <T1_1, T2_1, T3>(arrays1: _.List<T1_1>, arrays2: _.List<T2_1>, arrays3: _.List<T3>): [T1_1 | undefined, T2_1 | undefined, T3 | undefined][];
        <T1_2, T2_2, T3_1, T4>(arrays1: _.List<T1_2>, arrays2: _.List<T2_2>, arrays3: _.List<T3_1>, arrays4: _.List<T4>): [T1_2 | undefined, T2_2 | undefined, T3_1 | undefined, T4 | undefined][];
        <T1_3, T2_3, T3_2, T4_1, T5>(arrays1: _.List<T1_3>, arrays2: _.List<T2_3>, arrays3: _.List<T3_2>, arrays4: _.List<T4_1>, arrays5: _.List<T5>): [T1_3 | undefined, T2_3 | undefined, T3_2 | undefined, T4_1 | undefined, T5 | undefined][];
        <T>(...arrays: (_.List<T> | null | undefined)[]): (T | undefined)[][];
    };
    static kebabCase: (string?: string | undefined) => string;
    static xor: <T>(...arrays: (_.List<T> | null | undefined)[]) => T[];
    static snakeCase: (string?: string | undefined) => string;
    static sortedUniq: <T>(array: _.List<T> | null | undefined) => T[];
    static cloneDeep: <T>(value: T) => T;
    static cloneDeepWith: {
        <T>(value: T, customizer: _.CloneDeepWithCustomizer<T>): any;
        <T_1>(value: T_1): T_1;
    };
    static cloneWith: {
        <T, TResult extends string | number | boolean | object | null>(value: T, customizer: _.CloneWithCustomizer<T, TResult>): TResult;
        <T_1, TResult_1>(value: T_1, customizer: _.CloneWithCustomizer<T_1, TResult_1 | undefined>): T_1 | TResult_1;
        <T_2>(value: T_2): T_2;
    };
}
