From 69d113f6eddc70cfafc07c00d15ba79241241d51 Mon Sep 17 00:00:00 2001 From: Valeri Karpov Date: Tue, 6 Feb 2024 14:35:16 -0500 Subject: [PATCH] types(model): correct return type for findOneAndUpdate with `includeResultMetadata` and `lean` set Fix #14303 --- test/types/models.test.ts | 5 ++++- types/models.d.ts | 25 +++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/test/types/models.test.ts b/test/types/models.test.ts index 26134f77fd4..9bf423f136f 100644 --- a/test/types/models.test.ts +++ b/test/types/models.test.ts @@ -17,7 +17,7 @@ import mongoose, { } from 'mongoose'; import { expectAssignable, expectError, expectType } from 'tsd'; import { AutoTypedSchemaType, autoTypedSchema } from './schema.test'; -import { UpdateOneModel, ChangeStreamInsertDocument, ObjectId } from 'mongodb'; +import { ModifyResult, UpdateOneModel, ChangeStreamInsertDocument, ObjectId } from 'mongodb'; function rawDocSyntax(): void { interface ITest { @@ -684,6 +684,9 @@ async function gh13705() { const findOneAndUpdateRes = await TestModel.findOneAndUpdate({}, {}, { lean: true }); expectType(findOneAndUpdateRes); + + const findOneAndUpdateResWithMetadata = await TestModel.findOneAndUpdate({}, {}, { lean: true, includeResultMetadata: true }); + expectAssignable>(findOneAndUpdateResWithMetadata); } async function gh13746() { diff --git a/types/models.d.ts b/types/models.d.ts index caa4ea62696..b7994ff36d5 100644 --- a/types/models.d.ts +++ b/types/models.d.ts @@ -592,6 +592,17 @@ declare module 'mongoose' { ): QueryWithHelpers; /** Creates a `findOneAndUpdate` query, filtering by the given `_id`. */ + findByIdAndUpdate( + filter: FilterQuery, + update: UpdateQuery, + options: QueryOptions & { includeResultMetadata: true, lean: true } + ): QueryWithHelpers< + ModifyResult, + ResultDoc, + TQueryHelpers, + TRawDocType, + 'findOneAndUpdate' + >; findByIdAndUpdate( id: mongodb.ObjectId | any, update: UpdateQuery, @@ -675,9 +686,9 @@ declare module 'mongoose' { findOneAndUpdate( filter: FilterQuery, update: UpdateQuery, - options: QueryOptions & { lean: true } + options: QueryOptions & { includeResultMetadata: true, lean: true } ): QueryWithHelpers< - GetLeanResultType | null, + ModifyResult, ResultDoc, TQueryHelpers, TRawDocType, @@ -686,8 +697,14 @@ declare module 'mongoose' { findOneAndUpdate( filter: FilterQuery, update: UpdateQuery, - options: QueryOptions & { includeResultMetadata: true } - ): QueryWithHelpers, ResultDoc, TQueryHelpers, TRawDocType, 'findOneAndUpdate'>; + options: QueryOptions & { lean: true } + ): QueryWithHelpers< + GetLeanResultType | null, + ResultDoc, + TQueryHelpers, + TRawDocType, + 'findOneAndUpdate' + >; findOneAndUpdate( filter: FilterQuery, update: UpdateQuery,