diff --git a/test/types/document.test.ts b/test/types/document.test.ts index 48456bf480..19ca108329 100644 --- a/test/types/document.test.ts +++ b/test/types/document.test.ts @@ -371,7 +371,7 @@ async function gh12959() { const doc = await Model.findById('id').orFail(); expectType(doc._id); - expectType(doc.__v); + expectType(doc.__v); expectError(doc.subdocArray[0].__v); } diff --git a/test/types/models.test.ts b/test/types/models.test.ts index 2575ad3133..2e7c536eb3 100644 --- a/test/types/models.test.ts +++ b/test/types/models.test.ts @@ -623,9 +623,9 @@ async function gh13151() { const TestModel = model('Test', TestSchema); const test = await TestModel.findOne().lean(); - expectType(test); + expectType(test); if (!test) return; - expectType(test); + expectType(test); } function gh13206() { @@ -661,7 +661,7 @@ async function gh13705() { const schema = new Schema({ name: String }); const TestModel = model('Test', schema); - type ExpectedLeanDoc = (mongoose.FlattenMaps<{ name?: string | null }> & { _id: mongoose.Types.ObjectId }); + type ExpectedLeanDoc = (mongoose.FlattenMaps<{ name?: string | null }> & { _id: mongoose.Types.ObjectId } & { __v: number }); const findByIdRes = await TestModel.findById('0'.repeat(24), undefined, { lean: true }); expectType(findByIdRes); diff --git a/test/types/populate.test.ts b/test/types/populate.test.ts index 5ac5f76e83..9829fa8279 100644 --- a/test/types/populate.test.ts +++ b/test/types/populate.test.ts @@ -248,7 +248,6 @@ async function _11532() { if (!leanResult) return; expectType(leanResult.child.name); - expectError(leanResult?.__v); } async function gh11710() { diff --git a/test/types/schema.test.ts b/test/types/schema.test.ts index 90bcfce7f5..82988a05b1 100644 --- a/test/types/schema.test.ts +++ b/test/types/schema.test.ts @@ -1714,3 +1714,13 @@ async function gh14451() { myMap?: Record | null | undefined }>({} as TestJSON); } + +async function gh12959() { + const schema = new Schema({ name: String }); + const TestModel = model('Test', schema); + + const doc = await TestModel.findOne().orFail(); + expectType(doc.__v); + const leanDoc = await TestModel.findOne().lean().orFail(); + expectType(leanDoc.__v); +} diff --git a/types/index.d.ts b/types/index.d.ts index cb1087ea91..90afdd8b18 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -140,7 +140,7 @@ declare module 'mongoose' { export type Default__v = T extends { __v?: infer U } ? T - : T & { __v?: number }; + : T & { __v: number }; /** Helper type for getting the hydrated document type from the raw document type. The hydrated document type is what `new MyModel()` returns. */ export type HydratedDocument< diff --git a/types/models.d.ts b/types/models.d.ts index 5cc38840d8..5a5ced6094 100644 --- a/types/models.d.ts +++ b/types/models.d.ts @@ -126,7 +126,7 @@ declare module 'mongoose' { } interface ModifyResult { - value: Require_id | null; + value: Default__v> | null; /** see https://www.mongodb.com/docs/manual/reference/command/findAndModify/#lasterrorobject */ lastErrorObject?: { updatedExisting?: boolean; diff --git a/types/query.d.ts b/types/query.d.ts index 17c109972a..67129e6c7b 100644 --- a/types/query.d.ts +++ b/types/query.d.ts @@ -217,7 +217,7 @@ declare module 'mongoose' { type QueryOpThatReturnsDocument = 'find' | 'findOne' | 'findOneAndUpdate' | 'findOneAndReplace' | 'findOneAndDelete'; type GetLeanResultType = QueryOp extends QueryOpThatReturnsDocument - ? (ResultType extends any[] ? Require_id>>[] : Require_id>>) + ? (ResultType extends any[] ? Default__v>>>[] : Default__v>>>) : ResultType; type MergePopulatePaths> = QueryOp extends QueryOpThatReturnsDocument