type ClassInstance = { new (...args: any[]): void }; export type Entities = { [key: string]: ClassInstance }; export type UpperOptions = { name: string; entities: T; }; export type FieldsSelect = Partial< Record, boolean> >; export type QueryOptions< T extends ClassInstance, Fields extends FieldsSelect > = { select?: Fields; relations?: string; }; export type OneWhere = Partial<{ [key in keyof T]: T[key]; }>; type ResultType = { [K in keyof Fields]: K extends keyof T ? T[K] : never; }; type Expand = T extends unknown ? { [K in keyof T]: T[K] } : never; export type QueryResult< T extends ClassInstance, Fields extends FieldsSelect > = Expand, Fields>>;