rambdax
Version:
Extended version of Rambda - a lightweight, faster alternative to Ramda
40 lines (36 loc) • 819 B
text/typescript
import {Number} from '../Number/Number'
import {_Drop} from './Drop'
import {_Take} from './Take'
import {Cast} from '../Any/Cast'
import {Append} from './Append'
import {List} from './List'
import {Extends} from '../Any/Extends'
/**
@hidden
*/
type __Group<L extends List, N extends Number, LN extends List = []> = {
0: __Group<_Drop<L, N>, N, Append<LN, _Take<L, N>>>
1: LN
}[Extends<L, List<never>>]
/**
@hidden
*/
export type _Group<L extends List, N extends Number> =
__Group<L, N> extends infer X
? Cast<X, List>
: never
/**
Split `L` into sub-[[List]]s every `N`
@param L to group
@param N to split at
@returns [[List]]
@example
```ts
```
*/
export type Group<L extends List, N extends Number> =
L extends unknown
? N extends unknown
? _Group<L, N>
: never
: never