You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
665 B

import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<Maximum<[]>, never>>,
Expect<Equal<Maximum<[0, 2, 1]>, 2>>,
Expect<Equal<Maximum<[1, 20, 200, 150]>, 200>>,
]
type Max<
T extends number,
U extends number,
Acc extends 1[] = []
> =
Acc['length'] extends T
? U
: Acc['length'] extends U
? T
: Max<T, U, [...Acc, 1]>
type Maximum<
T extends unknown[]
> =
T extends [infer First, infer Second, ...infer Tail]
? First extends number
? Second extends number
? Maximum<[Max<First, Second>, ...Tail]>
: never
: never
: T extends [infer Head, ...infer Tail]
? T[0]
: never
;