I'd like to reverse the property names and types for a record that has unique constant property values.
const VALUE = {
field1: "fieldA",
field2: "fieldB"
} as const
type Reversed = Reverser<typeof VALUE>
//which should yield the following type
type Reversed = {
fieldA: "field1";
fieldB: "field2";
}
I dont think it is possible due to the fact that the property values arent necessarily unique. But I ask anyways ;-)
CodePudding user response:
You can use a mapped type with an as clause:
type Reverser<T extends Record<PropertyKey, PropertyKey>> = {
[P in keyof T as T[P]]: P
}
The as clause will take the P key and map it to anything else. In this case we map it to the type of the property at the key P (T[P]) . For the value of the property we just use the P as the type.
