rambda
Version:
Lightweight faster alternative to Ramda
27 lines (24 loc) • 592 B
text/typescript
import {Tuple} from './Tuple'
import {UnNest} from './UnNest'
import {True} from '../Boolean/Boolean'
import {Includes} from '../Object/Includes'
import {Cast} from '../Any/Cast'
type _Flatten<T extends Tuple> = {
0: _Flatten<UnNest<T>>
1: T
}[
Includes<T, Tuple, 'implements->'> extends True
? 0
: 1
]
/** Remove all dimensions of **`T`** (10 max)
* @param T to un-nest
* @returns **`any[]`**
* @example
* ```ts
* ```
*/
export type Flatten<T extends Tuple> =
_Flatten<T> extends infer X
? Cast<X, Tuple<any>> // todo this for all tuple casts
: never