@@ -19,45 +19,47 @@ namespace DeepStrictObjectKeys {
1919 P extends keyof Target = Exclude < keyof Target , keyof [ ] > ,
2020 > = [ Target ] extends [ never ]
2121 ? never
22- : P extends string
23- ? IsUnion < Target [ P ] > extends true
24- ? Equal < IsSafe , true > extends true
25- ? P // In safe mode, only return the key itself for union types
26- : // In unsafe mode, explore union types that mix primitives and objects
27- | P
28- | ( Target [ P ] extends infer E
29- ? E extends ValueType
30- ? P // For primitive types, just return the key
31- : E extends object
32- ? E extends Array < infer _Element extends object >
33- ? // For arrays of objects, add array notation and recurse into elements
34- | P
35- // | (Equal<IsSafe, true> extends true ? never : `${P}[*]`) // end of array
36- | `${P } ${Joiner [ 'array' ] } ${Joiner [ 'object' ] } ${Infer < _Element , Joiner , IsSafe > } ` // recursive
37- : // For regular objects, add object notation and recurse
38- `${P } ${Joiner [ 'object' ] } ${Infer < E , Joiner , IsSafe > } ` // recursive
39- : never // Remove all primitive types of union types.
40- : never )
41- : Target [ P ] extends Array < infer Element extends object >
42- ? // Handle arrays containing objects
43- | P
44- // | (Equal<IsSafe, true> extends true ? never : `${P}[*]`) // end of array
45- | `${P } ${Joiner [ 'array' ] } ${Joiner [ 'object' ] } ${Infer < Element , Joiner , false > } `
46- : Target [ P ] extends Array < infer _Element >
47- ? // Handle arrays containing primitives
48- Equal < IsSafe , true > extends true
49- ? P
50- : P | never // `${P}[*]`
51- : Target [ P ] extends ValueType
52- ? P // For primitive values, just return the key
53- : IsAny < Target [ P ] > extends true
54- ? P // For 'any' type, return the key
55- : Target [ P ] extends object
56- ? Target [ P ] extends Record < string , never >
57- ? `${P } ` // For empty objects, just return the key
58- : `${P } ` | `${P } ${Joiner [ 'object' ] } ${Infer < Target [ P ] , Joiner , false > } ` // For objects with properties, include both the key and nested paths
59- : never
60- : never ;
22+ :
23+ | ( P extends string
24+ ? IsUnion < Target [ P ] > extends true
25+ ? Equal < IsSafe , true > extends true
26+ ? P // In safe mode, only return the key itself for union types
27+ : // In unsafe mode, explore union types that mix primitives and objects
28+ | P
29+ | ( Target [ P ] extends infer E
30+ ? E extends ValueType
31+ ? P // For primitive types, just return the key
32+ : E extends object
33+ ? E extends Array < infer _Element extends object >
34+ ? // For arrays of objects, add array notation and recurse into elements
35+ | P
36+ // | (Equal<IsSafe, true> extends true ? never : `${P}[*]`) // end of array
37+ | `${P } ${Joiner [ 'array' ] } ${Joiner [ 'object' ] } ${Infer < _Element , Joiner , IsSafe > } ` // recursive
38+ : // For regular objects, add object notation and recurse
39+ `${P } ${Joiner [ 'object' ] } ${Infer < E , Joiner , IsSafe > } ` // recursive
40+ : never // Remove all primitive types of union types.
41+ : never )
42+ : Target [ P ] extends Array < infer Element extends object >
43+ ? // Handle arrays containing objects
44+ | P
45+ // | (Equal<IsSafe, true> extends true ? never : `${P}[*]`) // end of array
46+ | `${P } ${Joiner [ 'array' ] } ${Joiner [ 'object' ] } ${Infer < Element , Joiner , false > } `
47+ : Target [ P ] extends Array < infer _Element >
48+ ? // Handle arrays containing primitives
49+ Equal < IsSafe , true > extends true
50+ ? P
51+ : P | never // `${P}[*]`
52+ : Target [ P ] extends ValueType
53+ ? P // For primitive values, just return the key
54+ : IsAny < Target [ P ] > extends true
55+ ? P // For 'any' type, return the key
56+ : Target [ P ] extends object
57+ ? Target [ P ] extends Record < string , never >
58+ ? `${P } ` // For empty objects, just return the key
59+ : `${P } ` | `${P } ${Joiner [ 'object' ] } ${Infer < Target [ P ] , Joiner , false > } ` // For objects with properties, include both the key and nested paths
60+ : never
61+ : never )
62+ | ( [ Exclude < keyof Target , keyof [ ] > ] extends [ never ] ? never : '*' ) ;
6163}
6264
6365/**
0 commit comments