import type { Equal, Expect } from '@type-challenges/utils' import type { IgnoreMutability, UnknownArray } from 'type-space' /** * Reverses a tuple type. * * @example * ``` * Reverse<[1, 2, 3]> // [3, 2, 1] * ``` */ export type Reverse = IgnoreMutability extends T ? ReverseReadonly : ReverseMutable /** * @internal */ type ReverseMutable = T extends [infer F, ...infer R] ? [...Reverse, F] : [] /** * @internal */ type ReverseReadonly = T extends readonly [infer F, ...infer R] ? readonly [...ReverseReadonly, F] : readonly [] /** * @internal */ type _reverse_cases = [ // ^? Expect, []>>, Expect, [0]>>, Expect, [3, 2, 1]>>, Expect, ['b', 'a']>>, Expect, readonly [3, 2, 1]>>, Expect, readonly ['b', 'a']>> ]