feat: Enhance type safety for MongoDB filter conditions by introducing helper types for $in and $nin values
This commit is contained in:
		| @@ -151,6 +151,12 @@ export function index(options?: IIndexOptions) { | ||||
|   }; | ||||
| } | ||||
|  | ||||
| // Helper type to extract element type from arrays or return T itself | ||||
| type ElementOf<T> = T extends ReadonlyArray<infer U> ? U : T; | ||||
|  | ||||
| // Type for $in/$nin values - arrays of the element type | ||||
| type InValues<T> = ReadonlyArray<ElementOf<T>>; | ||||
|  | ||||
| // Type that allows MongoDB operators on leaf values while maintaining nested type safety | ||||
| export type MongoFilterCondition<T> = T | { | ||||
|   $eq?: T; | ||||
| @@ -159,15 +165,15 @@ export type MongoFilterCondition<T> = T | { | ||||
|   $gte?: T; | ||||
|   $lt?: T; | ||||
|   $lte?: T; | ||||
|   $in?: T extends (infer U)[] ? U[] | U : T[]; | ||||
|   $nin?: T extends (infer U)[] ? U[] | U : T[]; | ||||
|   $in?: InValues<T>; | ||||
|   $nin?: InValues<T>; | ||||
|   $exists?: boolean; | ||||
|   $type?: string | number; | ||||
|   $regex?: string | RegExp; | ||||
|   $options?: string; | ||||
|   $all?: T extends (infer U)[] ? U[] : never; | ||||
|   $elemMatch?: T extends (infer U)[] ? MongoFilter<U> : never; | ||||
|   $size?: T extends any[] ? number : never; | ||||
|   $all?: T extends ReadonlyArray<infer U> ? ReadonlyArray<U> : never; | ||||
|   $elemMatch?: T extends ReadonlyArray<infer U> ? MongoFilter<U> : never; | ||||
|   $size?: T extends ReadonlyArray<any> ? number : never; | ||||
|   $not?: MongoFilterCondition<T>; | ||||
| }; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user