type Query = { [K in Extract as TSelector[K] extends false ? never : K]: TSelector[K] extends true ? TObject[K] : TSelector[K] extends object ? TObject[K] extends Array ? Array> : TObject[K] extends object ? Query : never : never; } extends infer O ? { [K in keyof O]: O[K]; } : never; type Selector = { [K in keyof TSelector]: K extends keyof TObject ? TSelector[K] : never; }; /** * Query a relational object based on a selector. */ declare function queryObject(obj: T, selector: Selector): Query; export { queryObject }; export type { Query };