rambdax
Version:
Extended version of Rambda - a lightweight, faster alternative to Ramda
41 lines (37 loc) • 957 B
text/typescript
import {Prepend} from './Prepend'
import {Pos} from '../Iteration/Pos'
import {Next} from '../Iteration/Next'
import {Length} from './Length'
import {IterationOf} from '../Iteration/IterationOf'
import {Iteration} from '../Iteration/Iteration'
import {Cast} from '../Any/Cast'
import {List} from './List'
import {Naked} from './_Internal'
import {Extends} from '../Any/Extends'
/**
@hidden
*/
type __Reverse<L extends List, LO extends List, I extends Iteration = IterationOf<'0'>> = {
0: __Reverse<L, Prepend<LO, L[Pos<I>]>, Next<I>>
1: LO
}[Extends<Pos<I>, Length<L>>]
/**
@hidden
*/
export type _Reverse<L extends List, LO extends List = []> =
__Reverse<Naked<L>, LO> extends infer X
? Cast<X, List>
: never
/**
Turn a [[List]] the other way around
@param L to reverse
@param LO (?=`[]`) to prepend to
@returns [[List]]
@example
```ts
```
*/
export type Reverse<L extends List> =
L extends unknown
? _Reverse<L>
: never