type ObjToKeyValUnion = { [K in keyof T]: { key: K; value: T[K] } }[keyof T] type ObjToKeyValArray = { [K in keyof T]: [K, T[K]] }[keyof T] type ObjToSelectedValueUnion = { [K in keyof T]: T[K] }[keyof T] type Optional = Omit & Partial> type GetOptional = { [P in keyof T as T[P] extends Required[P] ? never : P]: T[P] }