Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

265
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!