Skip to content

Commit b6ffcfd

Browse files
committed
test: lint and test cases for #14545
1 parent 16e6985 commit b6ffcfd

File tree

2 files changed

+42
-8
lines changed

2 files changed

+42
-8
lines changed

test/types/queries.test.ts

+35
Original file line numberDiff line numberDiff line change
@@ -636,3 +636,38 @@ async function gh14525() {
636636
let doc2 = await ({} as ModelType).create({});
637637
doc2 = await ({} as ModelType).findOne({}).populate('test').orFail().exec();
638638
}
639+
640+
async function gh14545() {
641+
type Test = {
642+
_id: Types.ObjectId;
643+
644+
prop: string;
645+
another: string;
646+
647+
createdAt: number;
648+
updatedAt: number;
649+
};
650+
651+
const schema = new Schema<Test>({
652+
prop: { type: String },
653+
another: { type: String },
654+
createdAt: { type: Number },
655+
updatedAt: { type: Number }
656+
});
657+
658+
type TestDocument = HydratedDocument<Test>;
659+
type TestModel = Model<Test, {}, {}, {}, TestDocument>;
660+
661+
type SlimTest = Pick<Test, '_id' | 'prop'>;
662+
type SlimTestDocument = HydratedDocument<SlimTest>;
663+
664+
const M = model<Test, TestModel>('Test', schema);
665+
666+
const myDocs = await M.find({}).exec();
667+
const myDoc = await M.findOne({}).exec();
668+
669+
const myProjections = await M.find({}).select<SlimTest>({ prop: 1 }).exec();
670+
expectType<SlimTestDocument[]>(myProjections);
671+
const myProjection = await M.findOne({}).select<SlimTest>({ prop: 1 }).exec();
672+
expectType<SlimTestDocument | null>(myProjection);
673+
}

types/query.d.ts

+7-8
Original file line numberDiff line numberDiff line change
@@ -697,14 +697,13 @@ declare module 'mongoose' {
697697
RawDocTypeOverride,
698698
{},
699699
ResultType,
700-
ResultType extends any[] ?
701-
ResultType extends HydratedDocument<any>[] ?
702-
HydratedDocument<RawDocTypeOverride>[] :
703-
RawDocTypeOverride[] :
704-
| (ResultType extends HydratedDocument<any>
705-
? HydratedDocument<RawDocTypeOverride>
706-
: RawDocTypeOverride)
707-
| (null extends ResultType ? null : never)
700+
ResultType extends any[]
701+
? ResultType extends HydratedDocument<any>[]
702+
? HydratedDocument<RawDocTypeOverride>[]
703+
: RawDocTypeOverride[]
704+
: (ResultType extends HydratedDocument<any>
705+
? HydratedDocument<RawDocTypeOverride>
706+
: RawDocTypeOverride) | (null extends ResultType ? null : never)
708707
>,
709708
DocType,
710709
THelpers,

0 commit comments

Comments
 (0)