diff --git a/test/types/docArray.test.ts b/test/types/docArray.test.ts index c5c9154cde7..cf41df0b82e 100644 --- a/test/types/docArray.test.ts +++ b/test/types/docArray.test.ts @@ -93,3 +93,37 @@ async function gh13424() { const doc = new TestModel(); expectType(doc.subDocArray[0]._id); } + +async function gh14367() { + const UserSchema = new Schema( + { + reminders: { + type: [ + { + type: { type: Schema.Types.String }, + date: { type: Schema.Types.Date }, + toggle: { type: Schema.Types.Boolean }, + notified: { type: Schema.Types.Boolean } + } + ], + default: [ + { type: 'vote', date: new Date(), toggle: false, notified: false }, + { type: 'daily', date: new Date(), toggle: false, notified: false }, + { type: 'drop', date: new Date(), toggle: false, notified: false }, + { type: 'claim', date: new Date(), toggle: false, notified: false }, + { type: 'work', date: new Date(), toggle: false, notified: false } + ] + }, + avatar: { + type: Schema.Types.String + } + }, + { timestamps: true } + ); + + type IUser = InferSchemaType; + expectType({} as IUser['reminders'][0]['type']); + expectType({} as IUser['reminders'][0]['date']); + expectType({} as IUser['reminders'][0]['toggle']); + expectType({} as IUser['avatar']); +} diff --git a/test/types/schema.test.ts b/test/types/schema.test.ts index ec5c7ceb3e8..e7631229036 100644 --- a/test/types/schema.test.ts +++ b/test/types/schema.test.ts @@ -1059,10 +1059,10 @@ function gh12882() { }); type tArrType = InferSchemaType; expectType<{ - fooArray: { + fooArray: Types.DocumentArray<{ type: string; foo: number; - }[] + }> }>({} as tArrType); // Readonly array of strings const rArrString = new Schema({ @@ -1110,10 +1110,10 @@ function gh12882() { }); type rTArrType = InferSchemaType; expectType<{ - fooArray: { + fooArray: Types.DocumentArray<{ type: string; foo: number; - }[] + }> }>({} as rTArrType); } diff --git a/types/inferschematype.d.ts b/types/inferschematype.d.ts index 8f878b312f4..bdd56790a3d 100644 --- a/types/inferschematype.d.ts +++ b/types/inferschematype.d.ts @@ -229,7 +229,7 @@ type ResolvePathType[] : // If the type key isn't callable, then this is an array of objects, in which case // we need to call ObtainDocumentType to correctly infer its type. - ObtainDocumentType[] : + Types.DocumentArray> : IsSchemaTypeFromBuiltinClass extends true ? ObtainDocumentPathType[] : IsItRecordAndNotAny extends true ?