Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

133
Vistas
usar clave de objeto como clave para otro objeto

Quiero crear un tipo en TypeScript y usar valores de otro objeto para sus claves.

 const routes = { home: "HOME", profile: "PROFILE" } export type NavigatorParamList = { [routes.home]: undefined; [routes.profile]: undefined; };

¡Sé que este código no funciona! ¿Alguna idea de cómo hacerlo?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Las propiedades de su objeto son cadenas variables y TypeScript no le permitirá usarlas como propiedades calculadas para un tipo a menos que las convierta en literales de solo lectura con as const .

 const routes = { home: "HOME", profile: "PROFILE" } as const;
about 4 years ago · Juan Pablo Isaza Denunciar

0

Esto es para lo que son las enumeraciones de cadenas :

Parque infantil TS

 enum Route { Home = "HOME", Profile = "PROFILE" } // using a union of individual enum members: type NavigatorParamList1 = Record<Route.Home | Route.Profile, undefined>; // { HOME: undefined; PROFILE: undefined; } // or if you want to use all enum members: type NavigatorParamList2 = Record<Route, undefined>; // { HOME: undefined; PROFILE: undefined; } // or independently-defined members type NavigatorParamList3 = { [Route.Home]: undefined; [Route.Profile]: undefined; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Es factible con tipos mapeados y la nueva cláusula as :

 const routes = { home: "HOME", profile: "PROFILE" } as const; type AcceptableKeyTypes = string | number | symbol; type ObjectWithValuesWhichCanBeKeys = {[key: AcceptableKeyTypes]: AcceptableKeyTypes}; type ValuesAsKeys<T extends ObjectWithValuesWhichCanBeKeys> = {[P in keyof T as T[P]]: unknown}; let test: ValuesAsKeys<typeof routes> = {HOME: 7, PROFILE: 4};

patio de recreo mecanografiado

Estoy usando aquí un tipo genérico: ValuesAsKeys<T> .

Los valores de T deben restringirse a tipos que sean aceptables como claves: cadena | número | símbolo.

la parte [P in keyof T] es un tipo asignado, que itera sobre todas las claves de T. Luego, la cláusula as asigna la clave a un nuevo valor, en este caso a T[P] , que es el valor de la clave actual clave iterada.

Por último, el valor es desconocido, por lo que puede usar cualquier valor nuevo que desee. en el ejemplo que doy, estoy usando números como los nuevos valores, pero puede ser cualquier cosa.

Tenga en cuenta que, como se dijo en otras respuestas, las routes deben tener la aserción as const , de modo que los valores de cadena se consideren tipos literales y luego se puedan usar como claves escritas.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda