Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

266
Visualizações
¿Cómo crear un tipo Typescript basado en las claves/valores de un diccionario?

¿Hay alguna manera de generar automáticamente un tipo basado en un valor de diccionario? Por ejemplo, dado este diccionario de valores constantes:

 export const SHIPMETHODS: OptionsMap<UpsShipMethodOption> = { 'UPS': 'GND', 'UPS AIR2': '2DA', 'UPS 3DAY SELECT': '3DS' }

¿Hay alguna manera de generar automáticamente un tipo como este, sin tener que duplicar todo?

 export type ShipMethodOptionMap = { 'UPS': 'GND', 'UPS AIR2': '2DA', 'UPS 3DAY SELECT': '3DS' }

Desafortunadamente, keyof no parece funcionar ya que es un objeto y no un tipo, por lo que esto no funciona:

 export type UpsShipMethodOption = keyof SHIPMETHODS // Doesn't work

También intenté usar tipos mapeados con un tipo de unión predeclarado de las claves, pero tampoco funciona:

 /* Type 'KeyOptions' is not assignable to type 'string | number | symbol'. Type 'KeyOptions' is not assignable to type 'symbol'.ts(2322) */ export type OptionsMap<KeyOptions> = { readonly [Property in KeyOptions]: string; } export const SHIPMETHODS: OptionsMap<UpsShipMethodOption> = { 'UPS': 'GND', 'UPS AIR2': '2DA', 'UPS 3DAY SELECT': '3DS' } export type UpsShipMethodOption = 'UPS' | 'UPS AIR2' | 'UPS 3DAY SELECT'

Tengo un montón de diccionarios de este tipo, y la mayoría de ellos son bastante grandes (más de 30 teclas). Duplicar el diccionario en un tipo en todas partes haría que sea difícil mantenerlo en caso de que los valores cambien, ¡así que cualquier ayuda con esto sería genial!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Creo que solo quieres el typeof de operador. Simplemente obtiene el tipo de un valor.

 const SHIPMETHODS = { 'UPS': 'GND', 'UPS AIR2': '2DA', 'UPS 3DAY SELECT': '3DS' } as const // as const is important. type ShipMethodOptionMap = typeof SHIPMETHODS /* type ShipMethodOptionMap = { readonly UPS: "GND"; readonly 'UPS AIR2': "2DA"; readonly 'UPS 3DAY SELECT': "3DS"; } */ type UpsShipMethodOption = keyof ShipMethodOptionMap // type UpsShipMethodOption = "UPS" | "UPS AIR2" | "UPS 3DAY SELECT"

Solo tenga en cuenta el as const en su objeto que permite que TypeScript infiera los literales de cadena para que puedan convertirse en parte del tipo.

Patio de juegos

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda