Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Problemas com JWT-Decode

Pessoal estou tentando dar continuidade ao curso mas esse problema está travando a aplicação, segue a mensagem de erro: Could not find a declaration file for module 'jwt-decode' ... implicitly has an 'any' type. Try npm i --save-dev @types/jwt-decode if it exists or add a new declaration (.d.ts) file containing declare module 'jwt-decode';

Ja fiz o npm install jwt-decode e npm install --save-dev @types/jwt-decode, mas não está corrigindo.

segue user.service.ts:

  import { Injectable } from '@angular/core';
  import { Observable, Subject } from 'rxjs';
  import { TokenService } from '../token/token.service';
  import { User } from './user';
  import jwt_decode from 'jwt-decode';

  @Injectable({
    providedIn: 'root'
  })
  export class UserService{

    private userSubject: Subject<User> = new Subject<User>();
    constructor(private tokenService: TokenService){

      this.tokenService.hasToken() &&
      this.decodeAndNotify();
    }

    setToken(token:string) :void{
      this.tokenService.setToken(token);
      this.decodeAndNotify();
    }

    private decodeAndNotify(): void{
      const token = this.tokenService.getToken();
      const user:User = jwt_decode(token) as User;
      this.userSubject.next(user);
    }

    getUser(): Observable<User>{
      return this.userSubject.asObservable();
    }
  }
5 respostas

Fala ai Matheus, tudo bem? Nas versões mais antigas do jwt-decode era necessário utilizar o pacote de tipos separado, por exemplo: npm i -D @types/jwt-decode.

Mas, nas novas versões os tipos já fazem parte do jwt-decode em si.

Tente remover a jwt-decode e depois instalar novamente:

  1. npm un jwt-decode
  2. npm i jwt-decode

Fico no aguardo.

solução!

Fala Matheus! Obrigado por ajudar, o meu código funcionou depois que eu coloquei assim: const jwt_decode = require('jwt-decode');. Não sei exatamente o que ele faz mas funcionou achei no stackoverflow

Boa Matheus, fico feliz que tenha resolvido o problema.

Sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.

Exatamente, e para que o require() funcione, precisa instalar o

npm install @types/node

...e carregar o node no "types" do tsconfig.app.json:

.........
  "compilerOptions": {
    "outDir": "./out-tsc/app",
    "types": [
      "node"
    ]
  },
............

Entretanto, um simples

import jwtDecode from 'jwt-decode'; 

já importa a função jwtDecode do "barril" pra fazer o trabalho:

........
const user = jwtDecode(token) as User;
.........

Bom, foi o que funcionou comigo: não dá erro de compilação, nem no navegador, e um:

console.log(user);

...mostra o payload do usuário no console.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software