[d24f17c] | 1 | import { IterationOf } from '../Iteration/IterationOf';
|
---|
| 2 | import { Iteration } from '../Iteration/Iteration';
|
---|
| 3 | import { Prepend } from '../List/Prepend';
|
---|
| 4 | import { Prev } from '../Iteration/Prev';
|
---|
| 5 | import { Next } from '../Iteration/Next';
|
---|
| 6 | import { Cast } from '../Any/Cast';
|
---|
| 7 | import { Way } from '../Iteration/_Internal';
|
---|
| 8 | import { List } from '../List/List';
|
---|
| 9 | import { Extends } from '../Any/Extends';
|
---|
| 10 | import { Pos } from '../Iteration/Pos';
|
---|
| 11 | /**
|
---|
| 12 | * @hidden
|
---|
| 13 | */
|
---|
| 14 | declare type RangeForth<From extends Iteration, To extends Iteration, L extends List = []> = {
|
---|
| 15 | 0: RangeForth<Prev<From>, To, Prepend<L, Pos<From>>>;
|
---|
| 16 | 1: L;
|
---|
| 17 | }[Extends<From, To>];
|
---|
| 18 | /**
|
---|
| 19 | * @hidden
|
---|
| 20 | */
|
---|
| 21 | declare type RangeBack<From extends Iteration, To extends Iteration, L extends List = []> = {
|
---|
| 22 | 0: RangeBack<Next<From>, To, Prepend<L, Pos<From>>>;
|
---|
| 23 | 1: L;
|
---|
| 24 | }[Extends<From, To>];
|
---|
| 25 | /**
|
---|
| 26 | * @hidden
|
---|
| 27 | */
|
---|
| 28 | declare type __Range<From extends Iteration, To extends Iteration, way extends Way> = {
|
---|
| 29 | '->': RangeForth<To, Prev<From>>;
|
---|
| 30 | '<-': RangeBack<From, Next<To>>;
|
---|
| 31 | }[way];
|
---|
| 32 | /**
|
---|
| 33 | * @hidden
|
---|
| 34 | */
|
---|
| 35 | export declare type _Range<From extends number, To extends number, way extends Way> = __Range<IterationOf<From>, IterationOf<To>, way> extends infer X ? Cast<X, (string | number)[]> : never;
|
---|
| 36 | /**
|
---|
| 37 | * Create a range of * *number**s
|
---|
| 38 | * @param From to start with
|
---|
| 39 | * @param To to end with
|
---|
| 40 | * @param way (?=`'->'`) to reverse it
|
---|
| 41 | * @returns `string[] | number[] | boolean[]`
|
---|
| 42 | * @example
|
---|
| 43 | * ```ts
|
---|
| 44 | * import {N} from 'ts-toolbelt'
|
---|
| 45 | *
|
---|
| 46 | * type test0 = N.Range<'-2', '1'> // ['-2', '-1', '0', '1']
|
---|
| 47 | * type test1 = N.Range<'-2', '1', '->'> // ['-2', '-1', '0', '1']
|
---|
| 48 | * type test2 = N.Range<'-2', '1', '<-'> // ['1', '0', '-1', '-2']
|
---|
| 49 | * ```
|
---|
| 50 | */
|
---|
| 51 | export declare type Range<From extends number, To extends number, way extends Way = '->'> = From extends unknown ? To extends unknown ? _Range<From, To, way> : never : never;
|
---|
| 52 | export {};
|
---|