@@ -22,7 +22,10 @@ import type {
22
22
} from '../../../../src/mongo_types' ;
23
23
24
24
// MatchKeysAndValues - for basic mapping keys to their values, restricts that key types must be the same but optional, and permit dot array notation
25
- expectAssignable < MatchKeysAndValues < { a : number ; b : string } > > ( { a : 2 , 'dot.notation' : true } ) ;
25
+ expectAssignable < MatchKeysAndValues < { a : number ; b : string ; c : { d : boolean } } > > ( {
26
+ a : 2 ,
27
+ 'c.d' : true
28
+ } ) ;
26
29
expectNotType < MatchKeysAndValues < { a : number ; b : string } > > ( { b : 2 } ) ;
27
30
28
31
// AddToSetOperators
@@ -70,6 +73,7 @@ interface SubTestModel {
70
73
_id : ObjectId ;
71
74
field1 : string ;
72
75
field2 ?: string ;
76
+ field3 ?: number ;
73
77
}
74
78
75
79
type FruitTypes = 'apple' | 'pear' ;
@@ -78,6 +82,7 @@ type FruitTypes = 'apple' | 'pear';
78
82
interface TestModel {
79
83
stringField : string ;
80
84
numberField : number ;
85
+ numberArray : number [ ] ;
81
86
decimal128Field : Decimal128 ;
82
87
doubleField : Double ;
83
88
int32Field : Int32 ;
@@ -148,10 +153,13 @@ expectAssignable<UpdateFilter<TestModel>>({ $min: { doubleField: new Double(1.23
148
153
expectAssignable < UpdateFilter < TestModel > > ( { $min : { int32Field : new Int32 ( 10 ) } } ) ;
149
154
expectAssignable < UpdateFilter < TestModel > > ( { $min : { longField : Long . fromString ( '999' ) } } ) ;
150
155
expectAssignable < UpdateFilter < TestModel > > ( { $min : { stringField : 'a' } } ) ;
151
- expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'dot.notation' : 2 } } ) ;
152
- expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'subInterfaceArray.$' : 'string' } } ) ;
153
- expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'subInterfaceArray.$[bla]' : 40 } } ) ;
154
- expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'subInterfaceArray.$[]' : 1000.2 } } ) ;
156
+ expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'subInterfaceField.field1' : '2' } } ) ;
157
+ expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'numberArray.$' : 40 } } ) ;
158
+ expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'numberArray.$[bla]' : 40 } } ) ;
159
+ expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'numberArray.$[]' : 1000.2 } } ) ;
160
+ expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'subInterfaceArray.$.field3' : 40 } } ) ;
161
+ expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'subInterfaceArray.$[bla].field3' : 40 } } ) ;
162
+ expectAssignable < UpdateFilter < TestModel > > ( { $min : { 'subInterfaceArray.$[].field3' : 1000.2 } } ) ;
155
163
156
164
expectNotType < UpdateFilter < TestModel > > ( { $min : { numberField : 'a' } } ) ; // Matches the type of the keys
157
165
@@ -163,10 +171,13 @@ expectAssignable<UpdateFilter<TestModel>>({ $max: { doubleField: new Double(1.23
163
171
expectAssignable < UpdateFilter < TestModel > > ( { $max : { int32Field : new Int32 ( 10 ) } } ) ;
164
172
expectAssignable < UpdateFilter < TestModel > > ( { $max : { longField : Long . fromString ( '999' ) } } ) ;
165
173
expectAssignable < UpdateFilter < TestModel > > ( { $max : { stringField : 'a' } } ) ;
166
- expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'dot.notation' : 2 } } ) ;
167
- expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'subInterfaceArray.$' : - 10 } } ) ;
168
- expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'subInterfaceArray.$[bla]' : 40 } } ) ;
169
- expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'subInterfaceArray.$[]' : 1000.2 } } ) ;
174
+ expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'subInterfaceField.field1' : '2' } } ) ;
175
+ expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'numberArray.$' : 40 } } ) ;
176
+ expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'numberArray.$[bla]' : 40 } } ) ;
177
+ expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'numberArray.$[]' : 1000.2 } } ) ;
178
+ expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'subInterfaceArray.$.field3' : 40 } } ) ;
179
+ expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'subInterfaceArray.$[bla].field3' : 40 } } ) ;
180
+ expectAssignable < UpdateFilter < TestModel > > ( { $max : { 'subInterfaceArray.$[].field3' : 1000.2 } } ) ;
170
181
171
182
expectNotType < UpdateFilter < TestModel > > ( { $min : { numberField : 'a' } } ) ; // Matches the type of the keys
172
183
@@ -192,10 +203,16 @@ expectAssignable<UpdateFilter<TestModel>>({ $set: { int32Field: new Int32(10) }
192
203
expectAssignable < UpdateFilter < TestModel > > ( { $set : { longField : Long . fromString ( '999' ) } } ) ;
193
204
expectAssignable < UpdateFilter < TestModel > > ( { $set : { stringField : 'a' } } ) ;
194
205
expectError ( buildUpdateFilter ( { $set : { stringField : 123 } } ) ) ;
195
- expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'dot.notation' : 2 } } ) ;
196
- expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'subInterfaceArray.$' : - 10 } } ) ;
197
- expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'subInterfaceArray.$[bla]' : 40 } } ) ;
198
- expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'subInterfaceArray.$[]' : 1000.2 } } ) ;
206
+ expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'subInterfaceField.field2' : '2' } } ) ;
207
+ expectError ( buildUpdateFilter ( { $set : { 'subInterfaceField.field2' : 2 } } ) ) ;
208
+ expectError ( buildUpdateFilter ( { $set : { 'unknown.field' : null } } ) ) ;
209
+ expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'numberArray.$' : 40 } } ) ;
210
+ expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'numberArray.$[bla]' : 40 } } ) ;
211
+ expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'numberArray.$[]' : 1000.2 } } ) ;
212
+ expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'subInterfaceArray.$.field3' : 40 } } ) ;
213
+ expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'subInterfaceArray.$[bla].field3' : 40 } } ) ;
214
+ expectAssignable < UpdateFilter < TestModel > > ( { $set : { 'subInterfaceArray.$[].field3' : 1000.2 } } ) ;
215
+ expectError ( buildUpdateFilter ( { $set : { 'numberArray.$' : '20' } } ) ) ;
199
216
200
217
expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { numberField : 1 } } ) ;
201
218
expectAssignable < UpdateFilter < TestModel > > ( {
@@ -206,10 +223,19 @@ expectAssignable<UpdateFilter<TestModel>>({ $setOnInsert: { int32Field: new Int3
206
223
expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { longField : Long . fromString ( '999' ) } } ) ;
207
224
expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { stringField : 'a' } } ) ;
208
225
expectError ( buildUpdateFilter ( { $setOnInsert : { stringField : 123 } } ) ) ;
209
- expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { 'dot.notation' : 2 } } ) ;
210
- expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { 'subInterfaceArray.$' : - 10 } } ) ;
211
- expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { 'subInterfaceArray.$[bla]' : 40 } } ) ;
212
- expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { 'subInterfaceArray.$[]' : 1000.2 } } ) ;
226
+ expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { 'subInterfaceField.field1' : '2' } } ) ;
227
+ expectError ( buildUpdateFilter ( { $setOnInsert : { 'subInterfaceField.field2' : 2 } } ) ) ;
228
+ expectError ( buildUpdateFilter ( { $setOnInsert : { 'unknown.field' : null } } ) ) ;
229
+ expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { 'numberArray.$' : 40 } } ) ;
230
+ expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { 'numberArray.$[bla]' : 40 } } ) ;
231
+ expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { 'numberArray.$[]' : 1000.2 } } ) ;
232
+ expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { 'subInterfaceArray.$.field3' : 40 } } ) ;
233
+ expectAssignable < UpdateFilter < TestModel > > ( {
234
+ $setOnInsert : { 'subInterfaceArray.$[bla].field3' : 40 }
235
+ } ) ;
236
+ expectAssignable < UpdateFilter < TestModel > > ( {
237
+ $ssetOnInsert : { 'subInterfaceArray.$[].field3' : 1000.2 }
238
+ } ) ;
213
239
214
240
expectAssignable < UpdateFilter < TestModel > > ( { $unset : { numberField : '' } } ) ;
215
241
expectAssignable < UpdateFilter < TestModel > > ( { $unset : { decimal128Field : '' } } ) ;
0 commit comments