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

172
Visualizações
¿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 Respostas
Responde à pergunta

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