diff --git a/test/types/lean.test.ts b/test/types/lean.test.ts index f3ffc4fe275..52ae2522a5e 100644 --- a/test/types/lean.test.ts +++ b/test/types/lean.test.ts @@ -1,4 +1,4 @@ -import { Schema, model, Document, LeanDocument, Types, BaseDocumentType, DocTypeFromUnion, DocTypeFromGeneric } from 'mongoose'; +import { Schema, model, Document, LeanDocument, Types, BaseDocumentType, DocTypeFromUnion, DocTypeFromGeneric, ApplySchemaOptions } from 'mongoose'; import { expectError, expectNotType, expectType } from 'tsd'; const schema: Schema = new Schema({ name: { type: 'String' } }); @@ -171,11 +171,14 @@ async function getBaseDocumentType(): Promise { } async function getBaseDocumentTypeFromModel(): Promise { - interface User { + interface UserBase { name: string; email: string; avatar?: string; } + + type User = ApplySchemaOptions; + const schema = new Schema({}); const Model = model('UserBaseDocTypeFromModel', schema); type UserDocType = InstanceType; diff --git a/test/types/middleware.test.ts b/test/types/middleware.test.ts index 46c44d390e0..f8535183a2d 100644 --- a/test/types/middleware.test.ts +++ b/test/types/middleware.test.ts @@ -1,4 +1,4 @@ -import { Schema, model, Model, Document, SaveOptions, Query, Aggregate, HydratedDocument, PreSaveMiddlewareFunction } from 'mongoose'; +import { Schema, model, Model, Document, SaveOptions, Query, Aggregate, HydratedDocument, PreSaveMiddlewareFunction, ApplySchemaOptions } from 'mongoose'; import { expectError, expectType, expectNotType } from 'tsd'; interface ITest extends Document { @@ -101,7 +101,7 @@ const Test = model('Test', schema); function gh11257(): void { schema.pre('save', { document: true }, function() { - expectType>(this); + expectType>>(this); }); } diff --git a/test/types/schema.test.ts b/test/types/schema.test.ts index fd444506037..7a26317eb80 100644 --- a/test/types/schema.test.ts +++ b/test/types/schema.test.ts @@ -705,5 +705,5 @@ function gh12122() { expectType({} as ObtainSchemaGeneric); const Test3 = new Schema({ test: String }, { timestamps: true }); - expectType<{ test?: string; createdAt: Date; updatedAt: Date; }>({} as InferSchemaType); + expectType<{ __v: string; test?: string; createdAt: Date; updatedAt: Date; }>({} as InferSchemaType); } diff --git a/types/inferschematype.d.ts b/types/inferschematype.d.ts index dbbaf5dbcbe..caec0bdf923 100644 --- a/types/inferschematype.d.ts +++ b/types/inferschematype.d.ts @@ -66,8 +66,8 @@ declare module 'mongoose' { */ type ResolveSchemaOptions = Omit, 'statics' | 'methods' | 'query' | 'virtuals'>; - type ApplySchemaOptions = FlatRecord<(P extends 'paths' - ? ResolveTimestamps + type ApplySchemaOptions= DefaultSchemaOptions, P extends 'paths' | 'virtuals' = 'paths'> = FlatRecord<(P extends 'paths' + ? ResolveTimestamps, O> : ResolveId )>; } @@ -85,6 +85,10 @@ type Resolve_id = T extends { _id: any } ? T : O extends { _id: false } ? T : MergeType; +type Resolve__v> = O extends { versionKey: false } + ? T + : MergeType; + /** * @summary Checks if a document path is required or optional. * @param {P} P Document path.