@cuppachino/type-space
Version:
A collection of type utilities for TypeScript.
20 lines (19 loc) • 540 B
TypeScript
import type { IgnoreMutability, UnknownArray } from '../index.js';
/**
* Reverses a tuple type.
*
* @example
* ```
* Reverse<[1, 2, 3]> // [3, 2, 1]
* ```
*/
export type Reverse<T extends UnknownArray> = IgnoreMutability<T> extends T ? ReverseReadonly<T> : ReverseMutable<T>;
/**
* @internal
*/
type ReverseMutable<T> = T extends [infer F, ...infer R] ? [...Reverse<R>, F] : [];
/**
* @internal
*/
type ReverseReadonly<T> = T extends readonly [infer F, ...infer R] ? readonly [...ReverseReadonly<R>, F] : readonly [];
export {};