Typed Enum Flipping in Typescript

Volodymyr Yepishev - Nov 9 '22 - - Dev Community

Ever had a situation where you needed to swap key-value pairs of an enum in typescript and attempts to type it resulted in ugly Record<string, string> sort of crutch?

Turns out key remapping that came with v4.1 make it a breeze :)

Suppose we have some rhymes

enum Rhymes {
  Money = 'bread and honey',
  Phone = 'dog and bone'
}
Enter fullscreen mode Exit fullscreen mode

Key remapping and template literals allow us to write a generic to swap they keys for values:

type FlippedRecord<T> = {
  [K in keyof T as `${string & T[K]}`]: K
};
Enter fullscreen mode Exit fullscreen mode

So now we can get some type safety while creating flipped enum maps:

const reversedEnum: FlippedRecord<typeof Rhymes> = {
  'bread and honey': 'Money',
  'dog and bone': 'Phone'
}
Enter fullscreen mode Exit fullscreen mode

It's boombastic, check it out in playground :)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .