export type TupleRest = T['length'] extends 0 ? undefined : (((...b:T)=>void) extends (a:unknown, ...b:infer I)=>void ? I : []) export type TupleFirst = T['length'] extends 0 ? undefined : T[0] export type TupleExclude = T extends [] ? [Exclude] : T extends [infer Head, ...infer Tail] ? [Exclude, ...TupleExclude] : Exclude[] export type TupleMemberExtends, E> = T extends Readonly<[infer Head, ...infer Tail]> ? Head extends E ? true : Tail extends unknown[] ? TupleMemberExtends : { ERROR:'Tail is not an array' } : { ERROR:'Head does not extend E' } export type TupleValues> = T extends Readonly<[infer Head, ...infer Tail]> ? [Head, ...Tail] : { ERROR:'Unable to infer Head & Tail from T' } export type TupleConcat = T extends [infer A extends Readonly, ...infer Rest extends Readonly] ? A extends unknown[] ? [...A, ...TupleConcat] : A : T export type TupleToUnion = T[number]