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