@zimi/remote 0.2.1-alpha.4 → 0.2.1-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
type HasFunc<T> = T extends (...args: unknown[]) => unknown ? true : T extends unknown[] ? {
|
|
2
|
+
[K in keyof T]: HasFunc<T[K]>;
|
|
3
|
+
}[number] extends false ? false : true : T extends object ? {
|
|
4
|
+
[K in keyof T]: HasFunc<T[K]>;
|
|
5
|
+
}[keyof T] extends false ? false : true : false;
|
|
6
|
+
export type ToFunc<T extends object> = {
|
|
7
|
+
[K in keyof T]: T[K] extends (...args: infer Args) => infer Ret ? (...args: Args) => Promise<Awaited<Ret>> : HasFunc<T[K]> extends false ? () => Promise<T[K]> : T[K] extends object ? ToFunc<T[K]> : never;
|
|
8
|
+
};
|
|
9
|
+
type Assert<T extends true> = T;
|
|
10
|
+
interface TestObj {
|
|
11
|
+
a1: number;
|
|
12
|
+
a2: number[];
|
|
13
|
+
a3: [number, string];
|
|
14
|
+
a4: {
|
|
15
|
+
b: number;
|
|
16
|
+
c: [string];
|
|
17
|
+
};
|
|
18
|
+
a5: () => Promise<number>;
|
|
19
|
+
a6: () => Promise<number[]>;
|
|
20
|
+
a7: () => Promise<[number, string]>;
|
|
21
|
+
b: {
|
|
22
|
+
b1: number;
|
|
23
|
+
b2: number[];
|
|
24
|
+
b3: [number, string];
|
|
25
|
+
b4: () => {
|
|
26
|
+
b: number;
|
|
27
|
+
c: [string];
|
|
28
|
+
};
|
|
29
|
+
b5: () => Promise<number>;
|
|
30
|
+
b6: () => Promise<number[]>;
|
|
31
|
+
b7: () => Promise<[number, string]>;
|
|
32
|
+
};
|
|
33
|
+
f: {
|
|
34
|
+
b: number;
|
|
35
|
+
c: {
|
|
36
|
+
d: () => number;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export type TestA1 = Assert<ToFunc<TestObj>['a1'] extends () => Promise<number> ? true : false>;
|
|
41
|
+
export type TestA2 = Assert<ToFunc<TestObj>['a2'] extends () => Promise<number[]> ? true : false>;
|
|
42
|
+
export type TestA3 = Assert<ToFunc<TestObj>['a3'] extends () => Promise<[number, string]> ? true : false>;
|
|
43
|
+
export type TestA4 = Assert<ToFunc<TestObj>['a4'] extends () => Promise<{
|
|
44
|
+
b: number;
|
|
45
|
+
c: [string];
|
|
46
|
+
}> ? true : false>;
|
|
47
|
+
export type TestA5 = Assert<ToFunc<TestObj>['a5'] extends () => Promise<number> ? true : false>;
|
|
48
|
+
export type TestA6 = Assert<ToFunc<TestObj>['a6'] extends () => Promise<number[]> ? true : false>;
|
|
49
|
+
export type TestA7 = Assert<ToFunc<TestObj>['a7'] extends () => Promise<[number, string]> ? true : false>;
|
|
50
|
+
export type TestB1 = Assert<ToFunc<TestObj>['b']['b1'] extends () => Promise<number> ? true : false>;
|
|
51
|
+
export type TestB2 = Assert<ToFunc<TestObj>['b']['b2'] extends () => Promise<number[]> ? true : false>;
|
|
52
|
+
export type TestB3 = Assert<ToFunc<TestObj>['b']['b3'] extends () => Promise<[number, string]> ? true : false>;
|
|
53
|
+
export type TestB4 = Assert<ToFunc<TestObj>['b']['b4'] extends () => Promise<{
|
|
54
|
+
b: number;
|
|
55
|
+
c: [string];
|
|
56
|
+
}> ? true : false>;
|
|
57
|
+
export type TestB5 = Assert<ToFunc<TestObj>['b']['b5'] extends () => Promise<number> ? true : false>;
|
|
58
|
+
export type TestB6 = Assert<ToFunc<TestObj>['b']['b6'] extends () => Promise<number[]> ? true : false>;
|
|
59
|
+
export type TestB7 = Assert<ToFunc<TestObj>['b']['b7'] extends () => Promise<[number, string]> ? true : false>;
|
|
60
|
+
export type TestF = Assert<ToFunc<TestObj>['f']['b'] extends () => Promise<number> ? true : false>;
|
|
61
|
+
export type TestF2 = Assert<ToFunc<TestObj>['f']['c']['d'] extends () => Promise<number> ? true : false>;
|
|
62
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/remoteValue/type.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -88,7 +88,9 @@ export type TestB2 = Assert<
|
|
|
88
88
|
ToFunc<TestObj>['b']['b2'] extends () => Promise<number[]> ? true : false
|
|
89
89
|
>
|
|
90
90
|
export type TestB3 = Assert<
|
|
91
|
-
ToFunc<TestObj>['b']['b3'] extends () => Promise<[number, string]>
|
|
91
|
+
ToFunc<TestObj>['b']['b3'] extends () => Promise<[number, string]>
|
|
92
|
+
? true
|
|
93
|
+
: false
|
|
92
94
|
>
|
|
93
95
|
export type TestB4 = Assert<
|
|
94
96
|
ToFunc<TestObj>['b']['b4'] extends () => Promise<{
|
|
@@ -105,7 +107,9 @@ export type TestB6 = Assert<
|
|
|
105
107
|
ToFunc<TestObj>['b']['b6'] extends () => Promise<number[]> ? true : false
|
|
106
108
|
>
|
|
107
109
|
export type TestB7 = Assert<
|
|
108
|
-
ToFunc<TestObj>['b']['b7'] extends () => Promise<[number, string]>
|
|
110
|
+
ToFunc<TestObj>['b']['b7'] extends () => Promise<[number, string]>
|
|
111
|
+
? true
|
|
112
|
+
: false
|
|
109
113
|
>
|
|
110
114
|
export type TestF = Assert<
|
|
111
115
|
ToFunc<TestObj>['f']['b'] extends () => Promise<number> ? true : false
|