@@ -84,17 +84,17 @@ declare module 'mongoose' {
84
84
collection ?: string ,
85
85
options ?: CompileModelOptions
86
86
) : Model <
87
- InferSchemaType < TSchema > ,
88
- ObtainSchemaGeneric < TSchema , 'TQueryHelpers' > ,
89
- ObtainSchemaGeneric < TSchema , 'TInstanceMethods' > ,
90
- ObtainSchemaGeneric < TSchema , 'TVirtuals' > ,
91
- HydratedDocument <
92
- InferSchemaType < TSchema > ,
93
- ObtainSchemaGeneric < TSchema , 'TVirtuals' > & ObtainSchemaGeneric < TSchema , 'TInstanceMethods' > ,
94
- ObtainSchemaGeneric < TSchema , 'TQueryHelpers' > ,
95
- ObtainSchemaGeneric < TSchema , 'TVirtuals' >
96
- > ,
97
- TSchema
87
+ InferSchemaType < TSchema > ,
88
+ ObtainSchemaGeneric < TSchema , 'TQueryHelpers' > ,
89
+ ObtainSchemaGeneric < TSchema , 'TInstanceMethods' > ,
90
+ ObtainSchemaGeneric < TSchema , 'TVirtuals' > ,
91
+ HydratedDocument <
92
+ InferSchemaType < TSchema > ,
93
+ ObtainSchemaGeneric < TSchema , 'TVirtuals' > & ObtainSchemaGeneric < TSchema , 'TInstanceMethods' > ,
94
+ ObtainSchemaGeneric < TSchema , 'TQueryHelpers' > ,
95
+ ObtainSchemaGeneric < TSchema , 'TVirtuals' >
96
+ > ,
97
+ TSchema
98
98
> & ObtainSchemaGeneric < TSchema , 'TStaticMethods' > ;
99
99
100
100
export function model < T > ( name : string , schema ?: Schema < T , any , any > | Schema < T & Document , any , any > , collection ?: string , options ?: CompileModelOptions ) : Model < T > ;
@@ -154,23 +154,23 @@ declare module 'mongoose' {
154
154
DocType ,
155
155
any ,
156
156
TOverrides extends Record < string , never > ?
157
- Document < unknown , TQueryHelpers , DocType , TVirtuals > & Default__v < Require_id < DocType > > :
158
- IfAny <
159
- TOverrides ,
160
- Document < unknown , TQueryHelpers , DocType , TVirtuals > & Default__v < Require_id < DocType > > ,
161
- Document < unknown , TQueryHelpers , DocType , TVirtuals > & MergeType <
162
- Default__v < Require_id < DocType > > ,
163
- TOverrides
164
- >
157
+ Document < unknown , TQueryHelpers , DocType , TVirtuals > & Default__v < Require_id < DocType > > :
158
+ IfAny <
159
+ TOverrides ,
160
+ Document < unknown , TQueryHelpers , DocType , TVirtuals > & Default__v < Require_id < DocType > > ,
161
+ Document < unknown , TQueryHelpers , DocType , TVirtuals > & MergeType <
162
+ Default__v < Require_id < DocType > > ,
163
+ TOverrides
165
164
>
165
+ >
166
166
> ;
167
167
export type HydratedSingleSubdocument <
168
168
DocType ,
169
169
TOverrides = { }
170
170
> = IfAny <
171
- DocType ,
172
- any ,
173
- TOverrides extends Record < string , never > ?
171
+ DocType ,
172
+ any ,
173
+ TOverrides extends Record < string , never > ?
174
174
Types . Subdocument < unknown , Record < string , never > , DocType > & Require_id < DocType > :
175
175
IfAny <
176
176
TOverrides ,
@@ -185,22 +185,22 @@ declare module 'mongoose' {
185
185
DocType ,
186
186
any ,
187
187
TOverrides extends Record < string , never > ?
188
- Types . ArraySubdocument < unknown , Record < string , never > , DocType > & Require_id < DocType > :
189
- IfAny <
190
- TOverrides ,
191
- Types . ArraySubdocument < unknown , Record < string , never > , DocType > & Require_id < DocType > ,
192
- Types . ArraySubdocument < unknown , Record < string , never > , DocType > & MergeType <
193
- Require_id < DocType > ,
194
- TOverrides
195
- >
188
+ Types . ArraySubdocument < unknown , Record < string , never > , DocType > & Require_id < DocType > :
189
+ IfAny <
190
+ TOverrides ,
191
+ Types . ArraySubdocument < unknown , Record < string , never > , DocType > & Require_id < DocType > ,
192
+ Types . ArraySubdocument < unknown , Record < string , never > , DocType > & MergeType <
193
+ Require_id < DocType > ,
194
+ TOverrides
196
195
>
197
- > ;
196
+ >
197
+ > ;
198
198
199
199
export type HydratedDocumentFromSchema < TSchema extends Schema > = HydratedDocument <
200
- InferSchemaType < TSchema > ,
201
- ObtainSchemaGeneric < TSchema , 'TInstanceMethods' > & ObtainSchemaGeneric < TSchema , 'TVirtuals' > ,
202
- ObtainSchemaGeneric < TSchema , 'TQueryHelpers' > ,
203
- ObtainSchemaGeneric < TSchema , 'TVirtuals' >
200
+ InferSchemaType < TSchema > ,
201
+ ObtainSchemaGeneric < TSchema , 'TInstanceMethods' > & ObtainSchemaGeneric < TSchema , 'TVirtuals' > ,
202
+ ObtainSchemaGeneric < TSchema , 'TQueryHelpers' > ,
203
+ ObtainSchemaGeneric < TSchema , 'TVirtuals' >
204
204
> ;
205
205
206
206
export interface TagSet {
@@ -239,14 +239,14 @@ declare module 'mongoose' {
239
239
export type DiscriminatorModel < M , T > = T extends Model < infer T , infer TQueryHelpers , infer TInstanceMethods , infer TVirtuals >
240
240
?
241
241
M extends Model < infer M , infer MQueryHelpers , infer MInstanceMethods , infer MVirtuals >
242
- ? Model < Omit < M , keyof T > & T , MQueryHelpers | TQueryHelpers , MInstanceMethods | TInstanceMethods , MVirtuals | TVirtuals >
243
- : M
242
+ ? Model < Omit < M , keyof T > & T , MQueryHelpers | TQueryHelpers , MInstanceMethods | TInstanceMethods , MVirtuals | TVirtuals >
243
+ : M
244
244
: M ;
245
245
246
246
export type DiscriminatorSchema < DocType , M , TInstanceMethods , TQueryHelpers , TVirtuals , TStaticMethods , DisSchema > =
247
247
DisSchema extends Schema < infer DisSchemaEDocType , infer DisSchemaM , infer DisSchemaInstanceMethods , infer DisSchemaQueryhelpers , infer DisSchemaVirtuals , infer DisSchemaStatics >
248
- ? Schema < MergeType < DocType , DisSchemaEDocType > , DiscriminatorModel < DisSchemaM , M > , DisSchemaInstanceMethods | TInstanceMethods , DisSchemaQueryhelpers | TQueryHelpers , DisSchemaVirtuals | TVirtuals , DisSchemaStatics & TStaticMethods >
249
- : Schema < DocType , M , TInstanceMethods , TQueryHelpers , TVirtuals , TStaticMethods > ;
248
+ ? Schema < MergeType < DocType , DisSchemaEDocType > , DiscriminatorModel < DisSchemaM , M > , DisSchemaInstanceMethods | TInstanceMethods , DisSchemaQueryhelpers | TQueryHelpers , DisSchemaVirtuals | TVirtuals , DisSchemaStatics & TStaticMethods >
249
+ : Schema < DocType , M , TInstanceMethods , TQueryHelpers , TVirtuals , TStaticMethods > ;
250
250
251
251
type QueryResultType < T > = T extends Query < infer ResultType , any > ? ResultType : never ;
252
252
@@ -258,6 +258,8 @@ declare module 'mongoose' {
258
258
TVirtuals ,
259
259
TStaticMethods > = ( schema : Schema < DocType , M , TInstanceMethods , TQueryHelpers , TVirtuals , TStaticMethods > , opts ?: any ) => void ;
260
260
261
+ type InferParam < T , K > = K extends keyof T ? T [ K ] : { } ;
262
+
261
263
export class Schema <
262
264
RawDocType = any ,
263
265
TModelType = Model < RawDocType , any , any , any > ,
@@ -284,6 +286,37 @@ declare module 'mongoose' {
284
286
/** Adds key path / schema type pairs to this schema. */
285
287
add ( obj : SchemaDefinition < SchemaDefinitionType < RawDocType > , RawDocType > | Schema , prefix ?: string ) : this;
286
288
289
+ static fromDefinition <
290
+ MySchemaDef ,
291
+ MySchemaOptions extends SchemaOptions <
292
+ InferRawDocType < MySchemaDef > ,
293
+ InferParam < MySchemaOptions , 'methods' > ,
294
+ { } ,
295
+ { } ,
296
+ InferParam < MySchemaOptions , 'virtuals' > ,
297
+ HydratedDocument < InferRawDocType < MySchemaDef > , InferParam < MySchemaOptions , 'methods' > , { } , InferParam < MySchemaOptions , 'virtuals' > >
298
+ > ,
299
+ TMethods = InferParam < MySchemaOptions , 'methods' > ,
300
+ TVirtuals = InferParam < MySchemaOptions , 'virtuals' > ,
301
+ TStatics = InferParam < MySchemaOptions , 'statics' >
302
+ > (
303
+ schemaDefinition : MySchemaDef ,
304
+ options : MySchemaOptions
305
+ ) : Schema <
306
+ InferRawDocType < MySchemaDef > ,
307
+ Model <
308
+ InferRawDocType < MySchemaDef > ,
309
+ { } ,
310
+ TMethods ,
311
+ TVirtuals
312
+ > & TStatics ,
313
+ TMethods ,
314
+ { } ,
315
+ TVirtuals ,
316
+ TStatics ,
317
+ MySchemaOptions
318
+ > ;
319
+
287
320
/**
288
321
* Add an alias for `path`. This means getting or setting the `alias`
289
322
* is equivalent to getting or setting the `path`.
0 commit comments