@@ -359,3 +359,51 @@ function gh13738() {
359
359
expectType < Date > ( person . get ( 'dob' ) ) ;
360
360
expectType < { theme : string ; alerts : { sms : boolean } } > ( person . get ( 'settings' ) ) ;
361
361
}
362
+
363
+ async function gh14876 ( ) {
364
+ type CarObjectInterface = {
365
+ make : string ;
366
+ model : string ;
367
+ year : number ;
368
+ owner : Types . ObjectId ;
369
+ } ;
370
+ const carSchema = new Schema < CarObjectInterface > ( {
371
+ make : { type : String , required : true } ,
372
+ model : { type : String , required : true } ,
373
+ year : { type : Number , required : true } ,
374
+ owner : { type : Schema . Types . ObjectId , ref : 'User' }
375
+ } ) ;
376
+
377
+ type UserObjectInterface = {
378
+ name : string ;
379
+ age : number ;
380
+ } ;
381
+ const userSchema = new Schema < UserObjectInterface > ( {
382
+ name : String ,
383
+ age : Number
384
+ } ) ;
385
+
386
+ const Car = model < CarObjectInterface > ( 'Car' , carSchema ) ;
387
+ const User = model < UserObjectInterface > ( 'User' , userSchema ) ;
388
+
389
+ const user = await User . create ( { name : 'John' , age : 25 } ) ;
390
+ const car = await Car . create ( {
391
+ make : 'Toyota' ,
392
+ model : 'Camry' ,
393
+ year : 2020 ,
394
+ owner : user . _id
395
+ } ) ;
396
+
397
+ const populatedCar = await Car . findById ( car . _id )
398
+ . populate < { owner : UserObjectInterface } > ( 'owner' )
399
+ . exec ( ) ;
400
+
401
+ if ( ! populatedCar ) return ;
402
+
403
+ console . log ( populatedCar . owner . name ) ; // outputs John
404
+
405
+ const depopulatedCar = populatedCar . depopulate < { owner : Types . ObjectId } > ( 'owner' ) ;
406
+
407
+ expectType < UserObjectInterface > ( populatedCar . owner ) ;
408
+ expectType < Types . ObjectId > ( depopulatedCar . owner ) ;
409
+ }
0 commit comments