export type SelectSubset = { [key in keyof T]: key extends keyof U ? T[key] : never; } & (T extends SelectAndInclude ? 'Please either choose `select` or `include`.' : object); type SelectAndInclude = { select: any; include: any; }; /** * Removes fields that are in `Drop` from `T` and from * all objects that are recursively reachable from `T`. */ export type Removed = T extends object ? { [K in keyof T]: K extends Drop ? never : Removed; } : T; /** * Removes fields from `T` that are in `DropKey` and whose type is in `DropType`. * It does this for all objects that are recursively reachable from `T`. */ export type RemovedType = T extends object ? { [K in keyof T]: K extends DropKey ? T[K] extends DropType ? never : RemovedType : RemovedType; } : T; export {};