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

TypeScript:将键值类型反向映射到值键,typescript,Typescript,给定类型为的对象: type Key2Value = { foo: "bar" voo: "doo" } 如果此类型的值始终为字符串类型,如何构造将键值对反向映射到值键对的实用程序类型ReverseMap type Value2Key = ReverseMap<Key2Value> // yields: type Value2Key = { bar: "foo" doo: "voo" } 类型值2key=ReverseMap //收益率: 类型值2key={ 酒吧

给定类型为的对象:

type Key2Value = {
  foo: "bar"
  voo: "doo"
}
如果此类型的值始终为字符串类型,如何构造将键值对反向映射到值键对的实用程序类型
ReverseMap

type Value2Key = ReverseMap<Key2Value>
// yields:
type Value2Key = {
  bar: "foo"
  doo: "voo"
}
类型值2key=ReverseMap
//收益率:
类型值2key={
酒吧:“富”
杜:“voo”
}
键入Key2Value={
傅:“酒吧”
voo:“嘟嘟”
}
类型反转映射={
[P in T[keyof T]]:{
[K in keyof T]:T[K]扩展了P?K:从不
}[keyof T]
}
类型值2key=反向映射

发布以记录jcalz的应用程序。如果人们希望从类型中提取值,请检查“keyof any”的小注释,我明确希望删除它,因此您可以将其替换为T[keyof T],以避免使用any关键字。
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>