1 | import type { Head, Tail } from "./tuple.js";
|
2 |
|
3 |
|
4 |
|
5 | export declare type TypedKeys<A, B> = {
|
6 | [P in Keys<A>]: B extends A[P] ? P : never;
|
7 | }[keyof A];
|
8 | export declare type NumericKeys<T> = TypedKeys<T, number>;
|
9 | export declare type StringKeys<T> = TypedKeys<T, string>;
|
10 | export declare type DeepPartial<T> = Partial<{
|
11 | [k in keyof T]: DeepPartial<T[k]>;
|
12 | }>;
|
13 | export declare type Keys<T> = keyof Required<T>;
|
14 | export declare type Keys1<T, A extends Keys<T>> = Keys<Required<T>[A]>;
|
15 | export declare type Keys2<T, A extends Keys<T>, B extends Keys1<T, A>> = Keys1<Required<T>[A], B>;
|
16 | export declare type Keys3<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>> = Keys2<Required<T>[A], B, C>;
|
17 | export declare type Keys4<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>> = Keys3<Required<T>[A], B, C, D>;
|
18 | export declare type Keys5<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>> = Keys4<Required<T>[A], B, C, D, E>;
|
19 | export declare type Keys6<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>> = Keys5<Required<T>[A], B, C, D, E, F>;
|
20 | export declare type Keys7<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>, G extends Keys6<T, A, B, C, D, E, F>> = Keys6<Required<T>[A], B, C, D, E, F, G>;
|
21 | export declare type Keys8<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>, G extends Keys6<T, A, B, C, D, E, F>, H extends Keys7<T, A, B, C, D, E, F, G>> = Keys7<Required<T>[A], B, C, D, E, F, G, H>;
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | declare type KeysNReducer<T, L, R extends unknown[]> = L extends keyof T ? {
|
32 | 0: keyof Required<T>[L];
|
33 | 1: KeysNReducer<Required<T>[L], Head<R>, Tail<R>>;
|
34 | }[R extends [] ? 0 : 1] : never;
|
35 |
|
36 |
|
37 |
|
38 | export declare type KeysN<T, L extends unknown[]> = L extends [] ? Keys<T> : KeysNReducer<T, Head<L>, Tail<L>>;
|
39 | export declare type Val1<T, A extends Keys<T>> = T[A];
|
40 | export declare type Val2<T, A extends Keys<T>, B extends Keys1<T, A>> = ValN<T, [A, B]>;
|
41 | export declare type Val3<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>> = ValN<T, [A, B, C]>;
|
42 | export declare type Val4<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>> = ValN<T, [A, B, C, D]>;
|
43 | export declare type Val5<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>> = ValN<T, [A, B, C, D, E]>;
|
44 | export declare type Val6<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>> = ValN<T, [A, B, C, D, E, F]>;
|
45 | export declare type Val7<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>, G extends Keys6<T, A, B, C, D, E, F>> = ValN<T, [A, B, C, D, E, F, G]>;
|
46 | export declare type Val8<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>, G extends Keys6<T, A, B, C, D, E, F>, H extends Keys7<T, A, B, C, D, E, F, G>> = ValN<T, [A, B, C, D, E, F, G, H]>;
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 | declare type ValNReducer<T, C, R extends unknown[]> = C extends keyof T ? {
|
57 | 0: T[C];
|
58 | 1: ValNReducer<Required<T>[C], Head<R>, Tail<R>>;
|
59 | }[R extends [] ? 0 : 1] : never;
|
60 |
|
61 |
|
62 |
|
63 | export declare type ValN<T, L extends unknown[]> = L extends [] ? T : ValNReducer<T, Head<L>, Tail<L>>;
|
64 |
|
65 |
|
66 |
|
67 | export declare type Without<T, A extends Keys<T>> = Omit<T, A>;
|
68 | export declare type Without2<T, A extends Keys<T>, B extends Keys1<T, A>> = Without<T, A> & {
|
69 | [id in A]: Without<Val1<T, A>, B>;
|
70 | };
|
71 | export declare type Without3<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>> = Without<T, A> & {
|
72 | [id in A]: Without2<Val1<T, A>, B, C>;
|
73 | };
|
74 | export declare type Without4<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>> = Without<T, A> & {
|
75 | [id in A]: Without3<Val1<T, A>, B, C, D>;
|
76 | };
|
77 | export declare type Without5<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>> = Without<T, A> & {
|
78 | [id in A]: Without4<Val1<T, A>, B, C, D, E>;
|
79 | };
|
80 | export declare type Without6<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>> = Without<T, A> & {
|
81 | [id in A]: Without5<Val1<T, A>, B, C, D, E, F>;
|
82 | };
|
83 | export declare type Without7<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>, G extends Keys6<T, A, B, C, D, E, F>> = Without<T, A> & {
|
84 | [id in A]: Without6<Val1<T, A>, B, C, D, E, F, G>;
|
85 | };
|
86 | export declare type Without8<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>, G extends Keys6<T, A, B, C, D, E, F>, H extends Keys7<T, A, B, C, D, E, F, G>> = Without<T, A> & {
|
87 | [id in A]: Without7<Val1<T, A>, B, C, D, E, F, G, H>;
|
88 | };
|
89 |
|
90 |
|
91 |
|
92 |
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 | declare type WithoutNReducer<T, C, R extends unknown[]> = C extends keyof T ? {
|
99 | 0: Without<T, C>;
|
100 | 1: Without<T, C> & Record<C, WithoutNReducer<T[C], Head<R>, Tail<R>>>;
|
101 | }[R extends [] ? 0 : 1] : never;
|
102 |
|
103 |
|
104 |
|
105 | export declare type WithoutN<T, P extends unknown[]> = WithoutNReducer<T, Head<P>, Tail<P>>;
|
106 |
|
107 |
|
108 |
|
109 | export declare type Replace<T, A extends Keys<T>, V> = Without<T, A> & {
|
110 | [id in A]: V;
|
111 | };
|
112 | export declare type Replace2<T, A extends Keys<T>, B extends Keys1<T, A>, V> = Without<T, A> & {
|
113 | [id in A]: Replace<Val1<T, A>, B, V>;
|
114 | };
|
115 | export declare type Replace3<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, V> = Without<T, A> & {
|
116 | [id in A]: Replace2<Val1<T, A>, B, C, V>;
|
117 | };
|
118 | export declare type Replace4<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, V> = Without<T, A> & {
|
119 | [id in A]: Replace3<Val1<T, A>, B, C, D, V>;
|
120 | };
|
121 | export declare type Replace5<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, V> = Without<T, A> & {
|
122 | [id in A]: Replace4<Val1<T, A>, B, C, D, E, V>;
|
123 | };
|
124 | export declare type Replace6<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>, V> = Without<T, A> & {
|
125 | [id in A]: Replace5<Val1<T, A>, B, C, D, E, F, V>;
|
126 | };
|
127 | export declare type Replace7<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>, G extends Keys6<T, A, B, C, D, E, F>, V> = Without<T, A> & {
|
128 | [id in A]: Replace6<Val1<T, A>, B, C, D, E, F, G, V>;
|
129 | };
|
130 | export declare type Replace8<T, A extends Keys<T>, B extends Keys1<T, A>, C extends Keys2<T, A, B>, D extends Keys3<T, A, B, C>, E extends Keys4<T, A, B, C, D>, F extends Keys5<T, A, B, C, D, E>, G extends Keys6<T, A, B, C, D, E, F>, H extends Keys7<T, A, B, C, D, E, F, G>, V> = Without<T, A> & {
|
131 | [id in A]: Replace7<Val1<T, A>, B, C, D, E, F, G, H, V>;
|
132 | };
|
133 |
|
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 |
|
140 |
|
141 |
|
142 |
|
143 | declare type ReplaceNReducer<T, C, R extends unknown[], V> = C extends keyof T ? {
|
144 | 0: Replace<T, C, V>;
|
145 | 1: Without<T, C> & Record<C, ReplaceNReducer<T[C], Head<R>, Tail<R>, V>>;
|
146 | }[R extends [] ? 0 : 1] : never;
|
147 |
|
148 |
|
149 |
|
150 | export declare type ReplaceN<T, P extends unknown[], V> = ReplaceNReducer<T, Head<P>, Tail<P>, V>;
|
151 | export {};
|
152 |
|
\ | No newline at end of file |