import { Digit, DigitsToNumber, TupleForDigit } from "."
type GreaterThan = DigitsToNumber<[5]>
type Max = never
type MaxDigitArray =
A extends B
? A | B
: MaxByLength extends A | B
? MaxDigit, Head> extends Head | Head
? [Head, ...MaxDigitArray, Tail>]
: MaxDigit, Head> extends Head
? A
: B
: MaxByLength
type MaxDigit =
MaxByLength, TupleForDigit> extends TupleForDigit ? A
: MaxByLength, TupleForDigit> extends TupleForDigit | TupleForDigit ? A | B
: B
type MaxByLength =
A['length'] extends B['length'] ? A | B
: ToZeros extends [...infer Other, ...ToZeros] ? A
: B
type ToZeros = { [Property in keyof Tuple]: 0}
type HeadTail = Tuple extends [infer Head extends Type, ...infer Tail extends Type[]] ? [Head, Tail] : never
type Head = Tuple extends [infer Head extends Type, ...Type[]] ? Head : never
type Tail = Tuple extends [Type, ...infer Tail extends Type[]] ? Tail : never
let q: MaxDigitArray<[2, 0, 2], [2, 1]>
let x: ToZeros<[2, 0]>