1
- type AnySchema = NullSchema | BooleanSchema | NumberSchema | StringSchema | AnyEnumSchema | AnyArraySchema | AnyObjectSchema | AnyAllOptionalObjectSchema | AnyOneOfSchema
1
+ type AnySchema = NullSchema | BooleanSchema | NullableBooleanSchema | NumberSchema | NullableNumberSchema | StringSchema | NullableStringSchema | AnyEnumSchema | AnyArraySchema | AnyNullableArraySchema | AnyObjectSchema | AnyNullableObjectSchema | AnyAllOptionalObjectSchema | AnyNullableAllOptionalObjectSchema | AnyOneOfSchema
2
2
type StringKeys < T > = ( keyof T ) & string
3
3
4
- interface NullSchema {
5
- type : 'null'
6
- }
4
+ interface NullSchema { type : 'null' }
7
5
8
- interface BooleanSchema {
9
- type : 'boolean'
10
- }
6
+ interface BooleanSchema { type : 'boolean' }
7
+ interface NullableBooleanSchema { type : ( 'boolean' | 'null' ) [ ] }
11
8
12
- interface NumberSchema {
13
- type : 'number'
14
- }
9
+ interface NumberSchema { type : 'number' }
10
+ interface NullableNumberSchema { type : ( 'number' | 'null' ) [ ] }
15
11
16
- interface StringSchema {
17
- type : 'string'
18
- }
12
+ interface StringSchema { type : 'string' }
13
+ interface NullableStringSchema { type : ( 'string' | 'null' ) [ ] }
19
14
20
15
interface AnyEnumSchema extends EnumSchema < any > { }
21
- interface EnumSchema < Enum > {
22
- enum : Enum [ ]
23
- }
16
+ interface EnumSchema < Enum > { enum : Enum [ ] }
24
17
25
18
interface AnyArraySchema extends ArraySchema < AnySchema > { }
26
- interface ArraySchema < ItemSchema extends AnySchema > {
27
- type : 'array'
28
- items : ItemSchema
29
- }
19
+ interface ArraySchema < ItemSchema extends AnySchema > { type : 'array' , items : ItemSchema }
20
+
21
+ interface AnyNullableArraySchema extends NullableArraySchema < AnySchema > { }
22
+ interface NullableArraySchema < ItemSchema extends AnySchema > { type : ( 'array' | 'null' ) [ ] , items : ItemSchema }
30
23
31
24
interface AnyObjectSchema extends ObjectSchema < Record < string , AnySchema > , string > { }
32
25
interface ObjectSchema < Properties extends Record < string , AnySchema > , Required extends StringKeys < Properties > > {
@@ -36,13 +29,28 @@ interface ObjectSchema<Properties extends Record<string, AnySchema>, Required ex
36
29
required : Required [ ]
37
30
}
38
31
32
+ interface AnyNullableObjectSchema extends NullableObjectSchema < Record < string , AnySchema > , string > { }
33
+ interface NullableObjectSchema < Properties extends Record < string , AnySchema > , Required extends StringKeys < Properties > > {
34
+ additionalProperties ?: boolean
35
+ type : ( 'object' | 'null' ) [ ]
36
+ properties : Properties
37
+ required : Required [ ]
38
+ }
39
+
39
40
interface AnyAllOptionalObjectSchema extends AllOptionalObjectSchema < Record < string , AnySchema > > { }
40
41
interface AllOptionalObjectSchema < Properties extends Record < string , AnySchema > > {
41
42
additionalProperties ?: boolean
42
43
type : 'object'
43
44
properties : Properties
44
45
}
45
46
47
+ interface AnyNullableAllOptionalObjectSchema extends NullableAllOptionalObjectSchema < Record < string , AnySchema > > { }
48
+ interface NullableAllOptionalObjectSchema < Properties extends Record < string , AnySchema > > {
49
+ additionalProperties ?: boolean
50
+ type : ( 'object' | 'null' ) [ ]
51
+ properties : Properties
52
+ }
53
+
46
54
interface AnyOneOfSchema { oneOf : AnySchema [ ] }
47
55
48
56
interface ArrayFromSchema < ItemSchema extends AnySchema > extends Array < TypeFromSchema < ItemSchema > > { }
@@ -55,11 +63,17 @@ type TypeFromSchema<Schema extends AnySchema> = (
55
63
Schema extends EnumSchema < infer Enum > ? Enum
56
64
: Schema extends NullSchema ? null
57
65
: Schema extends BooleanSchema ? boolean
66
+ : Schema extends NullableBooleanSchema ? ( boolean | null )
58
67
: Schema extends NumberSchema ? number
68
+ : Schema extends NullableNumberSchema ? ( number | null )
59
69
: Schema extends StringSchema ? string
70
+ : Schema extends NullableStringSchema ? ( string | null )
60
71
: Schema extends ArraySchema < infer ItemSchema > ? ArrayFromSchema < ItemSchema >
72
+ : Schema extends NullableArraySchema < infer ItemSchema > ? ( ArrayFromSchema < ItemSchema > | null )
61
73
: Schema extends ObjectSchema < infer Properties , infer Required > ? ObjectFromSchema < Properties , Required >
74
+ : Schema extends NullableObjectSchema < infer Properties , infer Required > ? ( ObjectFromSchema < Properties , Required > | null )
62
75
: Schema extends AllOptionalObjectSchema < infer Properties > ? ObjectFromSchema < Properties , never >
76
+ : Schema extends NullableAllOptionalObjectSchema < infer Properties > ? ( ObjectFromSchema < Properties , never > | null )
63
77
: never
64
78
)
65
79
0 commit comments