UNPKG

@bemedev/types

Version:

Type definitions for Bemedev projects

25 lines 1.92 kB
import type { UnionOmit, UnionToTuple } from './commons.types'; export type IndexesOfArray<T extends readonly unknown[], S extends number[] = []> = T['length'] extends S['length'] ? S[number] : IndexesOfArray<T, [S['length'], ...S]>; type _TupleOf<T, N extends number, R extends unknown[] = []> = R['length'] extends N ? R : _TupleOf<T, N, [...R, T]>; export type TupleOf<T = any, N extends number = number> = N extends N ? number extends N ? T[] : [..._TupleOf<T, N>] : never; export type ReverseArray<T extends RuA> = T extends any ? T extends [] ? T : T extends [infer Head, ...infer Tail] ? [...ReverseArray<Tail>, Head] : T : never; export type RuA = readonly unknown[]; export type AnyArray<T = unknown> = ReadonlyArray<T> | T[]; export type _NArrayOmit<T extends readonly object[], K extends keyof T[number] = never> = Extract<UnionOmit<T[number], K>, object>; export type NArrayOmit<T extends readonly object[], K extends keyof T[number] = never> = _NArrayOmit<T, K> extends infer N extends object ? UnionToTuple<N> : never; export type ExtractArray<T extends AnyArray, U> = T extends readonly [ infer A, ...infer B ] ? A extends U ? [A, ...ExtractArray<B, U>] : [...ExtractArray<B, U>] : []; export type ExcludeArray<T extends AnyArray, U> = T extends readonly [ infer A, ...infer B ] ? A extends U ? ExcludeArray<B, U> : [A, ...ExcludeArray<B, U>] : []; export type ReduceArray<T> = T extends AnyArray ? T[number] : T; export type ReduceArrayS<T> = T extends AnyArray ? T[0] : T; export type ReduceDeepArray<T> = ReduceArray<T> extends AnyArray ? ReduceDeepArray<ReduceArray<T>> : ReduceArray<T>; export type ToArray<T> = T extends AnyArray ? T : AnyArray<T>; export type RecursiveArrayOf<T> = Array<_SingleOrRecursiveArrayOf<T>> | ReadonlyArray<_SingleOrRecursiveArrayOf<T>>; type _SingleOrRecursiveArrayOf<T> = T | RecursiveArrayOf<T>; export {}; //# sourceMappingURL=arrays.types.d.ts.map