diff --git a/test/types/schema.test.ts b/test/types/schema.test.ts index c65b3bfdd9c..d992f356166 100644 --- a/test/types/schema.test.ts +++ b/test/types/schema.test.ts @@ -564,6 +564,17 @@ const discriminatedSchema = batchSchema.discriminator('event', eventSchema); expectType & { message: string }>>(discriminatedSchema); +// discriminator statics +const eventSchema2 = new Schema({ message: String }, { discriminatorKey: 'kind', statics: { static1: function() { + return 0; +} } }); +const batchSchema2 = new Schema({ name: String }, { discriminatorKey: 'kind', statics: { static2: function() { + return 1; +} } }); +const discriminatedSchema2 = batchSchema2.discriminator('event', eventSchema2); + +expectAssignable & { message: string }, Model, {}, {}, {}, { static1(): number; static2(): number; }>>(discriminatedSchema2); + function gh11828() { interface IUser { name: string; diff --git a/types/index.d.ts b/types/index.d.ts index 60cac795520..6a41bfb2875 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -150,9 +150,10 @@ declare module 'mongoose' { : M : M; - export type DiscriminatorSchema = T extends Schema - ? Schema & T1, DiscriminatorModel, T3 | TInstanceMethods, T4 | TQueryHelpers, T5 | TVirtuals> - : Schema; + export type DiscriminatorSchema = + DisSchema extends Schema + ? Schema & DisSchemaEDocType, DiscriminatorModel, DisSchemaInstanceMethods | TInstanceMethods, DisSchemaQueryhelpers | TQueryHelpers, DisSchemaVirtuals | TVirtuals, DisSchemaStatics & TStaticMethods> + : Schema; type QueryResultType = T extends Query ? ResultType : never; @@ -195,7 +196,7 @@ declare module 'mongoose' { /** Returns a copy of this schema */ clone(): T; - discriminator(name: string, schema: T): DiscriminatorSchema; + discriminator(name: string, schema: DisSchema): DiscriminatorSchema; /** Returns a new schema that has the picked `paths` from this schema. */ pick(paths: string[], options?: SchemaOptions): T;