Quando o método decodeAndNotify() da classe UserService é chamado ela pega o token que foi configurado para aquele usuário e coloca na variável token. Depois, esse token é decodificado com a ajuda do jwt e é definido como uma interface do tipo User (que receberá id, nome, email), então a resposta obrigatoriamente tem que retornar essas 3 propriedades e seus valores? Simplesmente porque foi implementada a interface? E depois a dúvida principal, o que esse método .next da classe userSubject faz com o usuário criado?
private decodeAndNotify() {
const token = this.tokenService.getToken()
const user = decodifica(token) as User
this.userSubject.next(user)
}