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

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

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 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!