typescript-tuple
Advanced tools
Comparing version 1.1.1 to 1.2.0
@@ -31,2 +31,13 @@ /** | ||
export declare type Concat<Left extends any[], Right extends any[]> = utils.Concat<Left, Right>; | ||
/** | ||
* Repeat a certain type into a tuple | ||
* @example `Repeat<'foo', 4>` → `['foo', 'foo', 'foo', 'foo']` | ||
* @warning To avoid potential infinite loop, `Count` must be an integer greater than or equal to 0 | ||
*/ | ||
export declare type Repeat<Type, Count extends number> = utils.Repeat<Type, Count, []>; | ||
/** | ||
* Concat multiple tuples | ||
* @example `ConcatMultiple<[], [0], [1, 2], [3, 4, 5]>` → `[0, 1, 2, 3, 4, 5]` | ||
*/ | ||
export declare type ConcatMultiple<TupleSet extends any[][]> = utils.ConcatMultiple<TupleSet>; | ||
export declare namespace utils { | ||
@@ -48,2 +59,11 @@ type Last<Tuple extends any[], Default = never> = { | ||
}[Left extends [] ? 'emptyLeft' : Left extends [any] ? 'singleLeft' : 'multiLeft']; | ||
type Repeat<Type, Count extends number, Holder extends any[] = []> = { | ||
fit: Holder; | ||
unfit: Repeat<Type, Count, Prepend<Holder, Type>>; | ||
}[Holder['length'] extends Count ? 'fit' : 'unfit']; | ||
type ConcatMultiple<TupleSet extends any[][]> = { | ||
empty: []; | ||
single: TupleSet extends [infer SoleTuple] ? SoleTuple : never; | ||
multi: ((..._: Reverse<TupleSet>) => any) extends ((_: infer Last, ..._1: infer ReversedRest) => any) ? Last extends any[] ? ReversedRest extends any[][] ? Concat<ConcatMultiple<Reverse<ReversedRest>>, Last> : never : never : never; | ||
}[TupleSet extends [] ? 'empty' : TupleSet extends [any] ? 'single' : 'multi']; | ||
} |
{ | ||
"name": "typescript-tuple", | ||
"version": "1.1.1", | ||
"version": "1.2.0", | ||
"description": "Generics to work with tuples in TypeScript", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -59,4 +59,20 @@ # TypeScript Tuple | ||
### `Repeat` | ||
```typescript | ||
import { Repeat } from 'typescript-tuple' | ||
type Foo = Repeat<['x'], 5> // Expect ['x', 'x', 'x', 'x', 'x'] | ||
const foo: Foo = ['x', 'x', 'x', 'x', 'x'] | ||
``` | ||
### `ConcatMultiple` | ||
```typescript | ||
import { ConcatMultiple } from 'typescript-tuple' | ||
type Foo = ConcatMultiple<[[], ['a'], ['b', 'c']]> // Expect ['a', 'b', 'c'] | ||
const foo: Foo = ['a', 'b', 'c'] | ||
``` | ||
## License | ||
[MIT](https://git.io/fA2d9) @ [Hoàng Văn Khải](https://github.com/KSXGitHub) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
7082
69
78