rambda
Version:
Lightweight faster alternative to Ramda
30 lines (27 loc) • 698 B
text/typescript
import {Number} from '../Number/Number'
import {Drop} from './Drop'
import {Take} from './Take'
import {Cast} from '../Any/Cast'
import {Prepend} from './Prepend'
import {Reverse} from './Reverse'
import {Tuple} from './Tuple'
type _Group<T extends Tuple, N extends Number, TN extends Tuple = []> = {
0: _Group<Drop<T, N>, N, Prepend<TN, Take<T, N>>>
1: Reverse<TN>
}[
T extends Tuple<never>
? 1
: 0
]
/** Split **`T`** into sub-**tuple**s every **`N`**
* @param T to group
* @param N to split at
* @returns **`any[]`**
* @example
* ```ts
* ```
*/
export type Group<T extends Tuple, N extends Number> =
_Group<T, N> extends infer X
? Cast<X, Tuple>
: never