/** @hidden */ export declare type Nil = null | undefined; /** @hidden */ export declare type Primitive = boolean | number | string; /** @hidden */ export declare type Key = keyof any; /** @hidden */ export declare type Existent = Primitive | object; /** @hidden */ export declare type ObjectWith = Record; /** @hidden */ export declare type StringifiedKey = Cast; /** @hidden */ export declare type ArrayIteratee = (item: I, index: number) => O; /** @hidden */ export declare type ArrayNarrowingIteratee = (item: any, index: number) => item is O; /** @hidden */ export declare type ObjectIteratee = (item: T[keyof T], key: StringifiedKey) => O; /** @hidden */ export declare type ValueNarrowingIteratee = (item: any, key: StringifiedKey) => item is O; /** @hidden */ export declare type KeyNarrowingIteratee = (item: I[keyof I], key: any) => key is O; /** @hidden */ export declare type ValueIteratee = (value: T) => O; /** @hidden */ export declare type Cast = Exclude extends never ? I : O; /** @hidden */ export declare type Narrow = Extract | Extract; /** @hidden */ export declare type IfCouldBe = Extract extends never ? Extract extends never ? Else : If : If; /** @hidden */ export declare type IfIndexType = string extends T ? If : number extends T ? If : Else; /** @hidden */ export declare type Drop1Arg = T extends (arg1: any, ...rest: infer A) => infer R ? (...rest: A) => R : never; /** @hidden */ export declare type Drop2Args = T extends (arg1: any, arg2: any, ...rest: infer A) => infer R ? (...rest: A) => R : never; /** @hidden */ export declare type Drop3Args = T extends (arg1: any, arg2: any, arg3: any, ...rest: infer A) => infer R ? (...rest: A) => R : never; /** @hidden */ export declare type Drop4Args = T extends (arg1: any, arg2: any, arg3: any, arg4: any, ...rest: infer A) => infer R ? (...rest: A) => R : never;