Skip to content

Commit

Permalink
fix(types): avoid "excessively deep" type instantiation error when us…
Browse files Browse the repository at this point in the history
…ing bulkWrite() with type that extends from document

Fix #12277
  • Loading branch information
vkarpov15 committed Sep 27, 2022
1 parent d78d631 commit de20b5f
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 4 deletions.
30 changes: 29 additions & 1 deletion test/types/models.test.ts
Expand Up @@ -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';
Expand Down Expand Up @@ -314,6 +315,33 @@ function bulkWriteAddToSet() {
return M.bulkWrite(ops);
}

async function gh12277() {
type DocumentType<T> = Document<any, any, T> & T;

interface BaseModelClassDoc {
firstname: string;
}

const baseModelClassSchema = new Schema({
firstname: String
});

const BaseModel = model<DocumentType<BaseModelClassDoc>>('test', baseModelClassSchema);

await BaseModel.bulkWrite([
{
updateOne: {
update: {
firstname: 'test'
},
filter: {
firstname: 'asdsd'
}
}
}
]);
}

export function autoTypedModel() {
const AutoTypedSchema = autoTypedSchema();
const AutoTypedModel = model('AutoTypeModel', AutoTypedSchema);
Expand Down
6 changes: 3 additions & 3 deletions types/models.d.ts
Expand Up @@ -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<mongodb.AnyBulkWriteOperation<T extends {} ? T : any>>, options: mongodb.BulkWriteOptions & MongooseBulkWriteOptions, callback: Callback<mongodb.BulkWriteResult>): void;
bulkWrite(writes: Array<mongodb.AnyBulkWriteOperation<T extends {} ? T : any>>, callback: Callback<mongodb.BulkWriteResult>): void;
bulkWrite(writes: Array<mongodb.AnyBulkWriteOperation<T extends {} ? T : any>>, options?: mongodb.BulkWriteOptions & MongooseBulkWriteOptions): Promise<mongodb.BulkWriteResult>;
bulkWrite(writes: Array<mongodb.AnyBulkWriteOperation<T extends Document ? any : (T extends {} ? T : any)>>, options: mongodb.BulkWriteOptions & MongooseBulkWriteOptions, callback: Callback<mongodb.BulkWriteResult>): void;
bulkWrite(writes: Array<mongodb.AnyBulkWriteOperation<T extends Document ? any : (T extends {} ? T : any)>>, callback: Callback<mongodb.BulkWriteResult>): void;
bulkWrite(writes: Array<mongodb.AnyBulkWriteOperation<T extends Document ? any : (T extends {} ? T : any)>>, options?: mongodb.BulkWriteOptions & MongooseBulkWriteOptions): Promise<mongodb.BulkWriteResult>;

/**
* Sends multiple `save()` calls in a single `bulkWrite()`. This is faster than
Expand Down

0 comments on commit de20b5f

Please sign in to comment.