@@ -99,29 +99,39 @@ type Flatten<T> = T extends any[] ? T[number] : T
9999
100100 type IsArray<T > = T extends Array<any > ? true : false
101101 type IsAny<T > = 0 extends (1 & T) ? true : false;
102-
103- type DotNotationKeys<T , P extends string = ' ' > = IsAny<T > extends true ? P : T extends object
102+ type ExcludeUndefined<T > = T extends undefined ? never : T
103+
104+ type DotNotationKeys<T , P extends string = ' ' > = IsAny<T > extends true
105+ ? P
106+ : T extends object
104107 ? IsArray<T > extends true
105108 ? P extends ''
106109 ? never
107110 : P
108111 : {
109- [K in keyof T]: K extends string
112+ [K in keyof T]-?: ExcludeUndefined< K > extends string // Exclude undefined keys
110113 ? P extends ''
111- ? K | DotNotationKeys<T [K], K >
112- : `${P}.${K}` | DotNotationKeys<T [K], `${P}.${K}` >
114+ ?
115+ | ExcludeUndefined<K >
116+ | DotNotationKeys<ExcludeUndefined <T[K] >, ExcludeUndefined<K >>
117+ :
118+ | `${P}.${ExcludeUndefined<K >}`
119+ | DotNotationKeys<
120+ ExcludeUndefined<T [K] >,
121+ `${P}.${ExcludeUndefined<K >}`
122+ >
113123 : never
114124 }[keyof T]
115125 : P
116-
117- type FetchKeysArray<ResponseModel > = ResponseModel extends (infer DataModel)[]
118- ? DotNotationKeys<DataModel >[]
119- : ResponseModel extends {
120- results?: Array<infer DataModel >
121- count?: number
122- }
123- ? DotNotationKeys<DataModel >[]
124- : DotNotationKeys<ResponseModel >[]
126+
127+ type FetchKeysArray<ResponseModel > = ResponseModel extends (infer DataModel)[]
128+ ? DotNotationKeys<DataModel >[]
129+ : ResponseModel extends {
130+ results?: Array<infer DataModel >
131+ count?: number
132+ }
133+ ? DotNotationKeys<DataModel >[]
134+ : DotNotationKeys<ResponseModel >[]
125135
126136 type UnionToIntersection<U > = (U extends any ? (k: U) => void : never) extends (
127137 k: infer I
@@ -151,7 +161,7 @@ type Flatten<T> = T extends any[] ? T[number] : T
151161
152162 type Modify<T , R > = Omit<T , keyof R > & R;
153163
154- type PickKeysFromArray<ResponseModel , Keys extends string[] > = Keys extends never[]
164+ type PickKeysFromArray<ResponseModel , Keys extends string[] > = never[] extends Keys
155165 ? ResponseModel
156166 : ResponseModel extends (infer DataModel)[]
157167 ? Merge<ObjectWithKeysFromArray <DataModel, Keys >>[]
0 commit comments