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
22type StringKeys < T > = ( keyof T ) & string
33
4- interface NullSchema {
5- type : 'null'
6- }
4+ interface NullSchema { type : 'null' }
75
8- interface BooleanSchema {
9- type : 'boolean'
10- }
6+ interface BooleanSchema { type : 'boolean' }
7+ interface NullableBooleanSchema { type : ( 'boolean' | 'null' ) [ ] }
118
12- interface NumberSchema {
13- type : 'number'
14- }
9+ interface NumberSchema { type : 'number' }
10+ interface NullableNumberSchema { type : ( 'number' | 'null' ) [ ] }
1511
16- interface StringSchema {
17- type : 'string'
18- }
12+ interface StringSchema { type : 'string' }
13+ interface NullableStringSchema { type : ( 'string' | 'null' ) [ ] }
1914
2015interface AnyEnumSchema extends EnumSchema < any > { }
21- interface EnumSchema < Enum > {
22- enum : Enum [ ]
23- }
16+ interface EnumSchema < Enum > { enum : Enum [ ] }
2417
2518interface 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 }
3023
3124interface AnyObjectSchema extends ObjectSchema < Record < string , AnySchema > , string > { }
3225interface ObjectSchema < Properties extends Record < string , AnySchema > , Required extends StringKeys < Properties > > {
@@ -36,13 +29,28 @@ interface ObjectSchema<Properties extends Record<string, AnySchema>, Required ex
3629 required : Required [ ]
3730}
3831
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+
3940interface AnyAllOptionalObjectSchema extends AllOptionalObjectSchema < Record < string , AnySchema > > { }
4041interface AllOptionalObjectSchema < Properties extends Record < string , AnySchema > > {
4142 additionalProperties ?: boolean
4243 type : 'object'
4344 properties : Properties
4445}
4546
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+
4654interface AnyOneOfSchema { oneOf : AnySchema [ ] }
4755
4856interface ArrayFromSchema < ItemSchema extends AnySchema > extends Array < TypeFromSchema < ItemSchema > > { }
@@ -55,11 +63,17 @@ type TypeFromSchema<Schema extends AnySchema> = (
5563 Schema extends EnumSchema < infer Enum > ? Enum
5664 : Schema extends NullSchema ? null
5765 : Schema extends BooleanSchema ? boolean
66+ : Schema extends NullableBooleanSchema ? ( boolean | null )
5867 : Schema extends NumberSchema ? number
68+ : Schema extends NullableNumberSchema ? ( number | null )
5969 : Schema extends StringSchema ? string
70+ : Schema extends NullableStringSchema ? ( string | null )
6071 : Schema extends ArraySchema < infer ItemSchema > ? ArrayFromSchema < ItemSchema >
72+ : Schema extends NullableArraySchema < infer ItemSchema > ? ( ArrayFromSchema < ItemSchema > | null )
6173 : Schema extends ObjectSchema < infer Properties , infer Required > ? ObjectFromSchema < Properties , Required >
74+ : Schema extends NullableObjectSchema < infer Properties , infer Required > ? ( ObjectFromSchema < Properties , Required > | null )
6275 : Schema extends AllOptionalObjectSchema < infer Properties > ? ObjectFromSchema < Properties , never >
76+ : Schema extends NullableAllOptionalObjectSchema < infer Properties > ? ( ObjectFromSchema < Properties , never > | null )
6377 : never
6478)
6579
0 commit comments