Búsqueda de sitios web

typescript - Invertir el tipo clave-valor de un mapa a valor-clave


Dado un objeto del tipo:

type Key2Value = {
  foo: "bar"
  voo: "doo"
}

Dado que los valores de este tipo son siempre de tipo cadena, ¿cómo construir un tipo de utilidad ReverseMap<T> que invierta los pares clave-valor a pares valor-clave?

type Value2Key = ReverseMap<Key2Value>
// yields:
type Value2Key = {
  bar: "foo"
  doo: "voo"
}

Respuesta #1

Actualizado en 2024

A partir de TypeScript 4.1, la sintaxis de reasignación de claves nos ofrece una solución más concisa.

type ReverseMap<T extends Record<keyof T, keyof any>> = {
  [K in keyof T as T[K]]: K;
};

Respuesta Original

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>

Patio de recreo

Artículos relacionados