@@ -22,7 +22,10 @@ import type {
2222} from '../../../../src/mongo_types' ;
2323
2424// 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+ } ) ;
2629expectNotType < MatchKeysAndValues < { a : number ; b : string } > > ( { b : 2 } ) ;
2730
2831// AddToSetOperators
@@ -70,6 +73,7 @@ interface SubTestModel {
7073 _id : ObjectId ;
7174 field1 : string ;
7275 field2 ?: string ;
76+ field3 ?: number ;
7377}
7478
7579type FruitTypes = 'apple' | 'pear' ;
@@ -78,6 +82,7 @@ type FruitTypes = 'apple' | 'pear';
7882interface TestModel {
7983 stringField : string ;
8084 numberField : number ;
85+ numberArray : number [ ] ;
8186 decimal128Field : Decimal128 ;
8287 doubleField : Double ;
8388 int32Field : Int32 ;
@@ -148,10 +153,13 @@ expectAssignable<UpdateFilter<TestModel>>({ $min: { doubleField: new Double(1.23
148153expectAssignable < UpdateFilter < TestModel > > ( { $min : { int32Field : new Int32 ( 10 ) } } ) ;
149154expectAssignable < UpdateFilter < TestModel > > ( { $min : { longField : Long . fromString ( '999' ) } } ) ;
150155expectAssignable < 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 } } ) ;
155163
156164expectNotType < UpdateFilter < TestModel > > ( { $min : { numberField : 'a' } } ) ; // Matches the type of the keys
157165
@@ -163,10 +171,13 @@ expectAssignable<UpdateFilter<TestModel>>({ $max: { doubleField: new Double(1.23
163171expectAssignable < UpdateFilter < TestModel > > ( { $max : { int32Field : new Int32 ( 10 ) } } ) ;
164172expectAssignable < UpdateFilter < TestModel > > ( { $max : { longField : Long . fromString ( '999' ) } } ) ;
165173expectAssignable < 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 } } ) ;
170181
171182expectNotType < UpdateFilter < TestModel > > ( { $min : { numberField : 'a' } } ) ; // Matches the type of the keys
172183
@@ -192,10 +203,16 @@ expectAssignable<UpdateFilter<TestModel>>({ $set: { int32Field: new Int32(10) }
192203expectAssignable < UpdateFilter < TestModel > > ( { $set : { longField : Long . fromString ( '999' ) } } ) ;
193204expectAssignable < UpdateFilter < TestModel > > ( { $set : { stringField : 'a' } } ) ;
194205expectError ( 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' } } ) ) ;
199216
200217expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { numberField : 1 } } ) ;
201218expectAssignable < UpdateFilter < TestModel > > ( {
@@ -206,10 +223,19 @@ expectAssignable<UpdateFilter<TestModel>>({ $setOnInsert: { int32Field: new Int3
206223expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { longField : Long . fromString ( '999' ) } } ) ;
207224expectAssignable < UpdateFilter < TestModel > > ( { $setOnInsert : { stringField : 'a' } } ) ;
208225expectError ( 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+ } ) ;
213239
214240expectAssignable < UpdateFilter < TestModel > > ( { $unset : { numberField : '' } } ) ;
215241expectAssignable < UpdateFilter < TestModel > > ( { $unset : { decimal128Field : '' } } ) ;
0 commit comments