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

164
Vistas
¿Cuál es la solución cuando tengo que usar una propiedad que no está tipeada?

Estoy tratando de migrar lentamente a TypeScript porque lo considero una mejor alternativa que JavaScript antiguo.

Puede haber un inconveniente importante (que me di cuenta ahora) con él: no se escriben todos los atributos.

Por ejemplo:

En mi proyecto NodeJS, quiero usar el paquete npm jwt-decode. Tiene este archivo .d.ts:

 export class InvalidTokenError extends Error {} export interface JwtDecodeOptions { header?: boolean; } export interface JwtHeader { type?: string; alg?: string; } export interface JwtPayload { iss?: string; sub?: string; aud?: string[] | string; exp?: number; nbf?: number; iat?: number; jti?: string; } export default function jwtDecode<T = unknown>( token: string, options?: JwtDecodeOptions ): T;

Para este fragmento de código:

 var decoded: JwtHeader & JwtPayload = jwtDecode(bearerToken); console.log(decoded);

me sale este objeto:

 { exp: 1645637327, iat: 1645601327, jti: 'removed', iss: 'http://localhost:8080/auth/realms/supercatalog', aud: 'account', sub: 'removed', typ: 'Bearer', azp: 'restapi', session_state: '2434f33d-73c4-4f38-8c80-e92356380ffa', acr: '1', 'allowed-origins': [ '' ], realm_access: { roles: [ 'app-elev', 'offline_access', 'uma_authorization', 'default-roles-supercatalog' ] }, resource_access: { restapi: { roles: [Array] }, account: { roles: [Array] } }, scope: 'email profile', sid: 'removed', email_verified: false, preferred_username: 'elev' }

Necesito obtener acceso a resource_access -> restapi -> roles.

Ahora, el problema es que no está escrito y no puedo acceder a él. Si trato de console.log (decoded.resource_access) no funcionará.

Entonces, mi pregunta es la siguiente:

¿Cómo manejarías esta situación? ¿Cual es la solución?

Estoy pensando en:

  1. crear otra interfaz que implemente JwtPayload pero que tenga más atributos de los que necesito; no me gusta esto, llevaría mucho tiempo hacerlo cada vez, creo

  2. use decodificado como un objeto JS simple y acceda a cualquier cosa que quiera fácilmente; tampoco me gusta esto, anula todo el propósito de TS.

¿Cómo se puede gestionar una situación así?

Gracias.

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

0

// describe your custom fields interface MyJwt extends JwtHeader, JwtPayload { realm_access: { roles: string[] // a union of known types would be more relevant // provided that it is a fixed list } } // as a good practice don't use var, but const // and if it appears that you have to change it, switch to let const decoded = jwtDecode<MyJwt>(bearerToken); // or : const decoded: MyJwt = jwtDecode(bearerToken); // decoded has the expected type console.log(decoded.realm_access.roles);
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