记录类型反转器

rob*_*kuz 2 typescript mapped-types

我想反转具有唯一常量属性值的记录的属性名称和类型。

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";
} 
Run Code Online (Sandbox Code Playgroud)

我认为这是不可能的,因为属性值不一定是唯一的。但我还是要问;-)

Tit*_*mir 6

您可以将映射类型与as子句一起使用:

type Reverser<T extends Record<PropertyKey, PropertyKey>> = {
  [P in keyof T as T[P]]: P
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接

as子句将获取P密钥并将其映射到其他任何内容。P在本例中,我们将其映射到键( )处的属性类型T[P]。对于属性的值,我们只使用P作为类型。