export type Ord = number | string | boolean; export type AnyObj = Record; export type AnyArr = any[] | readonly any[]; export type AnyObjOrArr = AnyObj | AnyArr; export type ArrBase = (value: T, index: number, arr: ArrayLike) => R; export type ObjBase = (value: V, key: K, obj: Record) => R; export type ObjBaseBy, R> = (value: O[keyof O], key: keyof O & string, obj: O) => R; export type ObjOrArrBaseBy = Input extends AnyArr ? (value: ArrValues, key: number, obj: Input) => R : (value: ObjValues, key: keyof Input, obj: Input) => R; export type CompareFunc = (a: T, b: T) => R; export type OrdFunc = (item: T) => R; export type ArrOrdFunc = ArrBase; export type KeyValuePairs = Array<[U, V]>; export type Void = (...a: T[]) => void; export type Void1 = (a: T) => void; export type ArrVoid = ArrBase; export type ObjVoid = ObjBase; export type Endo = (...a: T[]) => T; export type Endo1 = (a: T) => T; export type Pred = (...a: T[]) => boolean; export type Pred1 = (a: T) => boolean; export type Pred2 = (a: U, b: V) => boolean; export type ArrPred = ArrBase; export type ObjPred = ObjBase; export type ObjPredBy = ObjBaseBy; export type MapFunc = (item: T, i: number, arr: ArrayLike) => R; export type Func = (...args: any[]) => R; export type Func1 = (arg: any) => R; export type Prop = keyof any; export type Paths = ReadonlyArray; export type Pattern = RegExp | string; export type ReplaceType = Pick> & { [p in K]: V; }; /** * Obtain the values type of a array */ export type ArrValues = A[number]; /** * Obtain the values type of a object */ export type ObjValues = O[keyof O]; export interface CurriedTypeGuard2 { (t1: T1): (t2: T2) => t2 is R; (t1: T1, t2: T2): t2 is R; } export interface CurriedTypeGuard3 { (t1: T1): CurriedTypeGuard2; (t1: T1, t2: T2): (t3: T3) => t3 is R; (t1: T1, t2: T2, t3: T3): t3 is R; } export interface CurriedTypeGuard4 { (t1: T1): CurriedTypeGuard3; (t1: T1, t2: T2): CurriedTypeGuard2; (t1: T1, t2: T2, t3: T3): (t4: T4) => t4 is R; (t1: T1, t2: T2, t3: T3, t4: T4): t4 is R; } export interface CurriedTypeGuard5 { (t1: T1): CurriedTypeGuard4; (t1: T1, t2: T2): CurriedTypeGuard3; (t1: T1, t2: T2, t3: T3): CurriedTypeGuard2; (t1: T1, t2: T2, t3: T3, t4: T4): (t5: T5) => t5 is R; (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): t5 is R; } export interface CurriedTypeGuard6 { (t1: T1): CurriedTypeGuard5; (t1: T1, t2: T2): CurriedTypeGuard4; (t1: T1, t2: T2, t3: T3): CurriedTypeGuard3; (t1: T1, t2: T2, t3: T3, t4: T4): CurriedTypeGuard2; (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): (t6: T6) => t6 is R; (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6): t6 is R; } export interface CurriedFunction2 { (t1: T1): (t2: T2) => R; (t1: T1, t2: T2): R; } export interface CurriedFunction3 { (t1: T1): CurriedFunction2; (t1: T1, t2: T2): (t3: T3) => R; (t1: T1, t2: T2, t3: T3): R; } export interface CurriedFunction4 { (t1: T1): CurriedFunction3; (t1: T1, t2: T2): CurriedFunction2; (t1: T1, t2: T2, t3: T3): (t4: T4) => R; (t1: T1, t2: T2, t3: T3, t4: T4): R; } export interface CurriedFunction5 { (t1: T1): CurriedFunction4; (t1: T1, t2: T2): CurriedFunction3; (t1: T1, t2: T2, t3: T3): CurriedFunction2; (t1: T1, t2: T2, t3: T3, t4: T4): (t5: T5) => R; (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R; } export interface CurriedFunction6 { (t1: T1): CurriedFunction5; (t1: T1, t2: T2): CurriedFunction4; (t1: T1, t2: T2, t3: T3): CurriedFunction3; (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction2; (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): (t6: T6) => R; (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6): R; }