TypeScript:将键-值类型反向映射到值-键

TypeScript: Reverse map key-value type to value-key

给出类型为

的对象

1
2
3
4
type Key2Value = {
  foo:"bar"
  voo:"doo"
}

提供了这种类型的值始终是字符串类型,如何构造实用程序类型ReverseMap<T>,该实用程序类型将键-值对反向映射到值-键对?

1
2
3
4
5
6
type Value2Key = ReverseMap<Key2Value>
// yields:
type Value2Key = {
  bar:"foo"
  doo:"voo"
}


1
2
3
4
5
6
7
8
9
10
11
12
type Key2Value = {
  foo:"bar"
  voo:"doo"
}

type ReverseMap<T extends Record<keyof T, keyof any>> = {
    [P in T[keyof T]]: {
        [K in keyof T]: T[K] extends P ? K : never
    }[keyof T]
}

type Value2Key = ReverseMap<Key2Value>

游乐场