UNPKG

1.54 kBTypeScriptView Raw
1import { Cast } from '../Any/Cast';
2import { List } from '../List/List';
3import { Extends } from '../Any/Extends';
4import { Select } from '../Union/Select';
5import { Exclude } from '../Union/Exclude';
6import { Iteration } from '../Iteration/Iteration';
7import { IterationOf } from '../Iteration/IterationOf';
8import { Pos } from '../Iteration/Pos';
9import { Key } from '../Iteration/Key';
10import { Append } from '../List/Append';
11import { Next } from '../Iteration/Next';
12/**
13 * @hidden
14 */
15declare type AppendExists<O extends object, LN extends List, I extends Iteration> = Key<I> extends keyof O ? Append<LN, O[Key<I>]> : Pos<I> extends keyof O ? Append<LN, O[Pos<I>]> : LN;
16/**
17 * @hidden
18 */
19declare type ___ListOf<O extends object, K, LN extends List = [], I extends Iteration = IterationOf<0>> = {
20 0: ___ListOf<O, Exclude<K, Key<I>>, AppendExists<O, LN, I>, Next<I>>;
21 1: LN;
22}[Extends<[K], [never]>];
23/**
24 * @hidden
25 */
26declare type __ListOf<O extends object> = number extends keyof O ? O[number][] : string extends keyof O ? O[string][] : symbol extends keyof O ? O[symbol][] : ___ListOf<O, Select<keyof O, number | `${number}`>>;
27/**
28 * @hidden
29 */
30export declare type _ListOf<O extends object> = __ListOf<O> extends infer X ? Cast<X, List> : never;
31/**
32 * Transform an [[Object]] into a [[List]]
33 * (It will only pick numeric literal indexes)
34 * @param O to transform
35 * @returns [[List]]
36 * @example
37 * ```ts
38 * ```
39 */
40export declare type ListOf<O extends object> = O extends unknown ? _ListOf<O> : never;
41export {};