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 {};
|
---|