From de20b5f872784f34d7893ded2a0c82b4a5fb489a Mon Sep 17 00:00:00 2001 From: Valeri Karpov Date: Tue, 27 Sep 2022 19:15:16 -0400 Subject: [PATCH] fix(types): avoid "excessively deep" type instantiation error when using bulkWrite() with type that extends from document Fix #12277 --- test/types/models.test.ts | 30 +++++++++++++++++++++++++++++- types/models.d.ts | 6 +++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/test/types/models.test.ts b/test/types/models.test.ts index 254ecc483ee..1013d89abc9 100644 --- a/test/types/models.test.ts +++ b/test/types/models.test.ts @@ -12,7 +12,8 @@ import { HydratedDocumentFromSchema, LeanDocument, Query, - UpdateWriteOpResult + UpdateWriteOpResult, + InferSchemaType } from 'mongoose'; import { expectAssignable, expectError, expectType } from 'tsd'; import { AutoTypedSchemaType, autoTypedSchema } from './schema.test'; @@ -314,6 +315,33 @@ function bulkWriteAddToSet() { return M.bulkWrite(ops); } +async function gh12277() { + type DocumentType = Document & T; + + interface BaseModelClassDoc { + firstname: string; + } + + const baseModelClassSchema = new Schema({ + firstname: String + }); + + const BaseModel = model>('test', baseModelClassSchema); + + await BaseModel.bulkWrite([ + { + updateOne: { + update: { + firstname: 'test' + }, + filter: { + firstname: 'asdsd' + } + } + } + ]); +} + export function autoTypedModel() { const AutoTypedSchema = autoTypedSchema(); const AutoTypedModel = model('AutoTypeModel', AutoTypedSchema); diff --git a/types/models.d.ts b/types/models.d.ts index d2774b2c644..d3cbbcf1338 100644 --- a/types/models.d.ts +++ b/types/models.d.ts @@ -146,9 +146,9 @@ declare module 'mongoose' { * if you use `create()`) because with `bulkWrite()` there is only one network * round trip to the MongoDB server. */ - bulkWrite(writes: Array>, options: mongodb.BulkWriteOptions & MongooseBulkWriteOptions, callback: Callback): void; - bulkWrite(writes: Array>, callback: Callback): void; - bulkWrite(writes: Array>, options?: mongodb.BulkWriteOptions & MongooseBulkWriteOptions): Promise; + bulkWrite(writes: Array>, options: mongodb.BulkWriteOptions & MongooseBulkWriteOptions, callback: Callback): void; + bulkWrite(writes: Array>, callback: Callback): void; + bulkWrite(writes: Array>, options?: mongodb.BulkWriteOptions & MongooseBulkWriteOptions): Promise; /** * Sends multiple `save()` calls in a single `bulkWrite()`. This is faster than