@@ -4,7 +4,15 @@ declare module 'mongoose' {
4
4
5
5
type WithLevel1NestedPaths < T , K extends keyof T = keyof T > = {
6
6
[ P in K | NestedPaths < Required < T > , K > ] : P extends K
7
- ? NonNullable < T [ P ] >
7
+ // Handle top-level paths
8
+ // First, drill into documents so we don't end up surfacing `$assertPopulated`, etc.
9
+ ? Extract < NonNullable < T [ P ] > , Document > extends never
10
+ // If not a document, then return the type. Otherwise, get the DocType.
11
+ ? NonNullable < T [ P ] >
12
+ : Extract < NonNullable < T [ P ] > , Document > extends Document < any , any , infer DocType , any >
13
+ ? DocType
14
+ : never
15
+ // Handle nested paths
8
16
: P extends `${infer Key } .${infer Rest } `
9
17
? Key extends keyof T
10
18
? T [ Key ] extends ( infer U ) [ ]
@@ -21,13 +29,19 @@ declare module 'mongoose' {
21
29
type NestedPaths < T , K extends keyof T > = K extends string
22
30
? T [ K ] extends TreatAsPrimitives
23
31
? never
24
- : T [ K ] extends Array < infer U >
25
- ? U extends Record < string , any >
26
- ? `${K } .${keyof NonNullable < U > & string } `
27
- : never
28
- : T [ K ] extends Record < string , any > | null | undefined
29
- ? `${K } .${keyof NonNullable < T [ K ] > & string } `
30
- : never
32
+ : Extract < NonNullable < T [ K ] > , Document > extends never
33
+ ? T [ K ] extends Array < infer U >
34
+ ? U extends Record < string , any >
35
+ ? `${K } .${keyof NonNullable < U > & string } `
36
+ : never
37
+ : T [ K ] extends Record < string , any > | null | undefined
38
+ ? `${K } .${keyof NonNullable < T [ K ] > & string } `
39
+ : never
40
+ : Extract < NonNullable < T [ K ] > , Document > extends Document < any , any , infer DocType , any >
41
+ ? DocType extends Record < string , any >
42
+ ? `${K } .${keyof NonNullable < DocType > & string } `
43
+ : never
44
+ : never
31
45
: never ;
32
46
33
47
type WithoutUndefined < T > = T extends undefined ? never : T ;
0 commit comments