import { TypesMap, Generic } from 'free-types-core'; import { Next } from 'free-types-core/dist/utils.js'; import { Fn } from './types.js'; export { Next, Prev, Subtract, Last, Init, IsAny, IsUnknown } from 'free-types-core/dist/utils.js'; export { MapOver as MapOverTuple } from 'free-types/essential/Tuple/MapOver.js'; export { _ } from 'free-types/essential/_partial.js'; export { _$Optional } from 'free-types/essential/adapters/$Optional.js'; export type IsArray = any[] extends T ? true : never[] extends T ? true : false; export type IsOpenEnded = T extends readonly unknown[] ? IsArray extends true ? false : number extends T['length'] ? true : false : false; export type HeadLength = number extends T['length'] ? T extends readonly [unknown, ...infer Rest] ? HeadLength : R['length'] : never; export type RestElement = T extends readonly [unknown, ...infer Rest] ? RestElement : T[number]; export type GetOrElse = T extends U ? T : E; export type GenericFree = Exclude, Fn | readonly unknown[] | Record>; export type SequenceTo = I extends N ? R | I : SequenceTo, R | I>; export type ToNumber = T extends `${infer I extends number}` ? I : never; export type Parameters = P extends any ? unknown[] extends P ? never : P : never; export type PickUnionMember T) => void : never, Overloads = [HOFs] extends [(a: infer I) => any] ? I : never> = Overloads extends () => (infer R) ? R : never; export type Union2Tuple> = [ U ] extends [never] ? [] : [...Union2Tuple>, T];