diff --git a/test/types/queries.test.ts b/test/types/queries.test.ts index 5d5ad58948f..ce589e36fb1 100644 --- a/test/types/queries.test.ts +++ b/test/types/queries.test.ts @@ -1,4 +1,18 @@ -import { HydratedDocument, Schema, model, Document, Types, Query, Model, QueryWithHelpers, PopulatedDoc, FilterQuery, UpdateQuery } from 'mongoose'; +import { + HydratedDocument, + Schema, + model, + Document, + Types, + Query, + Model, + QueryWithHelpers, + PopulatedDoc, + FilterQuery, + UpdateQuery, + ApplyBasicQueryCasting, + QuerySelector +} from 'mongoose'; import { ObjectId } from 'mongodb'; import { expectError, expectType } from 'tsd'; import { autoTypedModel } from './models.test'; @@ -295,3 +309,21 @@ function autoTypedQuery() { const query = AutoTypedModel.find(); expectType(AutoTypedModel.find().byUserName('')); } + +function gh11964() { + type Condition = ApplyBasicQueryCasting | QuerySelector>; // redefined here because it's not exported by mongoose + + type WithId = T & { id: string }; + + class Repository { + /* ... */ + + find(id: string) { + const idCondition: Condition>['id'] = id; // error :( + const filter: FilterQuery> = { id }; // error :( + + /* ... */ + } + } + +} \ No newline at end of file diff --git a/types/query.d.ts b/types/query.d.ts index fbb7f504834..5468cf68ec9 100644 --- a/types/query.d.ts +++ b/types/query.d.ts @@ -1,7 +1,7 @@ declare module 'mongoose' { import mongodb = require('mongodb'); - export type ApplyBasicQueryCasting = T extends any[] ? T[0] & defaultT: defaultT; + export type ApplyBasicQueryCasting = T | T[] | (T extends (infer U)[] ? U : any) | any; type Condition = ApplyBasicQueryCasting | QuerySelector>; type _FilterQuery = {