export type OmitInferKey = { [K in keyof T as T extends R ? never : K]: T[K]; }; export type OmitInferValue = { [K in keyof T as T extends R ? never : K]: T[K]; }; export type ValueOf = Obj[keyof Obj]; export type OneOnly = { [key in Exclude]?: undefined; } & Pick; export type OneOfByKey = { [key in keyof Obj]: OneOnly; }; export type OneOf = ValueOf>; type IsOptional = { [K1 in Exclude]: T[K1]; } & { K?: T[K]; } extends T ? K : never; export type OptionalKeys = { [K in keyof T]: IsOptional; }[keyof T]; export {};