1 | import { NestedValue } from './form';
|
2 | export type Noop = () => void;
|
3 | interface File extends Blob {
|
4 | readonly lastModified: number;
|
5 | readonly name: string;
|
6 | }
|
7 | interface FileList {
|
8 | readonly length: number;
|
9 | item(index: number): File | null;
|
10 | [index: number]: File;
|
11 | }
|
12 | export type Primitive = null | undefined | string | number | boolean | symbol | bigint;
|
13 | export type BrowserNativeObject = Date | FileList | File;
|
14 | export type EmptyObject = {
|
15 | [K in string | number]: never;
|
16 | };
|
17 | export type NonUndefined<T> = T extends undefined ? never : T;
|
18 | export type LiteralUnion<T extends U, U extends Primitive> = T | (U & {
|
19 | _?: never;
|
20 | });
|
21 | export type ExtractObjects<T> = T extends infer U ? U extends object ? U : never : never;
|
22 | export type DeepPartial<T> = T extends BrowserNativeObject | NestedValue ? T : {
|
23 | [K in keyof T]?: ExtractObjects<T[K]> extends never ? T[K] : DeepPartial<T[K]>;
|
24 | };
|
25 | export type DeepPartialSkipArrayKey<T> = T extends BrowserNativeObject | NestedValue ? T : T extends ReadonlyArray<any> ? {
|
26 | [K in keyof T]: DeepPartialSkipArrayKey<T[K]>;
|
27 | } : {
|
28 | [K in keyof T]?: DeepPartialSkipArrayKey<T[K]>;
|
29 | };
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 | export type IsAny<T> = 0 extends 1 & T ? true : false;
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 | export type IsNever<T> = [T] extends [never] ? true : false;
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 | export type IsEqual<T1, T2> = T1 extends T2 ? (<G>() => G extends T1 ? 1 : 2) extends <G>() => G extends T2 ? 1 : 2 ? true : false : false;
|
64 | export type DeepMap<T, TValue> = IsAny<T> extends true ? any : T extends BrowserNativeObject | NestedValue ? TValue : T extends object ? {
|
65 | [K in keyof T]: DeepMap<NonUndefined<T[K]>, TValue>;
|
66 | } : TValue;
|
67 | export type IsFlatObject<T extends object> = Extract<Exclude<T[keyof T], NestedValue | Date | FileList>, any[] | object> extends never ? true : false;
|
68 | export type Merge<A, B> = {
|
69 | [K in keyof A | keyof B]?: K extends keyof A & keyof B ? [A[K], B[K]] extends [object, object] ? Merge<A[K], B[K]> : A[K] | B[K] : K extends keyof A ? A[K] : K extends keyof B ? B[K] : never;
|
70 | };
|
71 | export {};
|
72 |
|
\ | No newline at end of file |