export namespace TSVersion { type Digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; type Digit = Digits[number]; export type DigitLT< A extends Digit, B extends Digit, ShiftedNumbers = Digits > = ShiftedNumbers extends [infer Head, ...infer Tail] ? B extends Head ? false : A extends Head ? true : DigitLT : never; export type DigitEQ = A extends B ? true : false; export type DigitLTE = DigitEQ< A, B > extends true ? true : DigitLT; type PossibleMajors = 3 | 4 | 5 | 6 | 7 | 8 | 9; type PossibleMinors = Digit; export type Major = 4; export type Minor = 7; export type AtLeast< Major extends PossibleMajors, Minor extends PossibleMinors > = DigitLT extends true ? true : DigitEQ extends true ? DigitLTE : false; }