type KeyFromValue> = { [K in keyof TType]: TValue extends TType[K] ? K : never; }[keyof TType]; type Invert> = { [TValue in TType[keyof TType]]: KeyFromValue; }; /** * @internal */ export function invert>( obj: TRecord, ): Invert { const newObj = Object.create(null); for (const key in obj) { const v = obj[key]; newObj[v] = key; } return newObj; }