@@ -126,3 +126,77 @@ expectType<ComplexOption>(complexBarSchema.readonlySet);
126
126
expectType < readonly ComplexOption [ ] > ( complexBarSchema . readonlyArray ) ;
127
127
expectType < readonly [ ComplexOption ] > ( complexBarSchema . readonlyTuple ) ;
128
128
expectType < ComplexOption > ( complexBarSchema . regExp ) ;
129
+
130
+ // With Options and `recurseIntoArrays` set to `false`
131
+ type FooSchemaWithOptionsNoRecurse = Schema < typeof foo , FooOption , { recurseIntoArrays : false | undefined } > ;
132
+
133
+ const fooSchemaWithOptionsNoRecurse : FooSchemaWithOptionsNoRecurse = {
134
+ baz : 'A' ,
135
+ bar : {
136
+ function : 'A' ,
137
+ object : { key : 'A' } ,
138
+ string : 'A' ,
139
+ number : 'A' ,
140
+ boolean : 'A' ,
141
+ symbol : 'A' ,
142
+ map : 'A' ,
143
+ set : 'A' ,
144
+ array : 'A' ,
145
+ tuple : 'A' ,
146
+ objectArray : 'A' ,
147
+ readonlyMap : 'A' ,
148
+ readonlySet : 'A' ,
149
+ readonlyArray : 'A' as const ,
150
+ readonlyTuple : 'A' as const ,
151
+ regExp : 'A' ,
152
+ } ,
153
+ } ;
154
+
155
+ expectNotAssignable < FooSchemaWithOptionsNoRecurse > ( foo ) ;
156
+ expectNotAssignable < FooSchemaWithOptionsNoRecurse > ( { key : 'value' } ) ;
157
+ expectNotAssignable < FooSchemaWithOptionsNoRecurse > ( new Date ( ) ) ;
158
+ expectType < FooOption > ( fooSchemaWithOptionsNoRecurse . baz ) ;
159
+
160
+ const barSchemaWithOptionsNoRecurse = fooSchemaWithOptionsNoRecurse . bar as Schema < typeof foo [ 'bar' ] , FooOption , { recurseIntoArrays : false | undefined } > ;
161
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . function ) ;
162
+ expectType < FooOption | { key : FooOption } > ( barSchemaWithOptionsNoRecurse . object ) ;
163
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . string ) ;
164
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . number ) ;
165
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . boolean ) ;
166
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . symbol ) ;
167
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . map ) ;
168
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . set ) ;
169
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . array ) ;
170
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . tuple ) ;
171
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . objectArray ) ;
172
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . readonlyMap ) ;
173
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . readonlySet ) ;
174
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . readonlyArray ) ;
175
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . readonlyTuple ) ;
176
+ expectType < FooOption > ( barSchemaWithOptionsNoRecurse . regExp ) ;
177
+
178
+ // With Options and `recurseIntoArrays` set to `true`
179
+ type FooSchemaWithOptionsRecurse = Schema < typeof foo , FooOption , { recurseIntoArrays : true } > ;
180
+
181
+ expectNotAssignable < FooSchemaWithOptionsRecurse > ( foo ) ;
182
+ expectNotAssignable < FooSchemaWithOptionsRecurse > ( { key : 'value' } ) ;
183
+ expectNotAssignable < FooSchemaWithOptionsRecurse > ( new Date ( ) ) ;
184
+ expectType < FooOption > ( fooSchema . baz ) ;
185
+
186
+ const barSchemaWithOptionsRecurse = fooSchema . bar as Schema < typeof foo [ 'bar' ] , FooOption , { recurseIntoArrays : true } > ;
187
+ expectType < FooOption > ( barSchemaWithOptionsRecurse . function ) ;
188
+ expectType < FooOption | { key : FooOption } > ( barSchemaWithOptionsRecurse . object ) ;
189
+ expectType < FooOption > ( barSchemaWithOptionsRecurse . string ) ;
190
+ expectType < FooOption > ( barSchemaWithOptionsRecurse . number ) ;
191
+ expectType < FooOption > ( barSchemaWithOptionsRecurse . boolean ) ;
192
+ expectType < FooOption > ( barSchemaWithOptionsRecurse . symbol ) ;
193
+ expectType < FooOption > ( barSchemaWithOptionsRecurse . map ) ;
194
+ expectType < FooOption > ( barSchemaWithOptionsRecurse . set ) ;
195
+ expectType < FooOption [ ] > ( barSchemaWithOptionsRecurse . array ) ;
196
+ expectType < FooOption [ ] > ( barSchemaWithOptionsRecurse . tuple ) ;
197
+ expectType < Array < { key : FooOption } > > ( barSchemaWithOptionsRecurse . objectArray ) ;
198
+ expectType < FooOption > ( barSchemaWithOptionsRecurse . readonlyMap ) ;
199
+ expectType < FooOption > ( barSchemaWithOptionsRecurse . readonlySet ) ;
200
+ expectType < readonly FooOption [ ] > ( barSchemaWithOptionsRecurse . readonlyArray ) ;
201
+ expectType < readonly [ FooOption ] > ( barSchemaWithOptionsRecurse . readonlyTuple ) ;
202
+ expectType < FooOption > ( barSchemaWithOptionsRecurse . regExp ) ;
0 commit comments