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]>