Fala galera, beleza? Tava com um problema quando ao invés de um objeto, estava passando uma variável (imagine que possa ter digitado errado) e estava sempre tomando o erro de código. Resolvi fazendo uma verificação dentro do método "ehAutenticavel()" se o autenticavel é do tipo objeto, assim:
//Ser autenticável significa ter o método autenticar! Dessa forma, o sistema de autenticação só verifica a existencia do método autenticar!!
export class SistemaAutenticacao {
//Um método estático é um método que pode ser chamado diretamente da classe, sem necessidade de instanciar nenhum objeto.
static login(autenticavel, senha) {
if (SistemaAutenticacao.ehAutenticavel(autenticavel)) {
if (autenticavel.autenticar(senha)) {
console.log(`${autenticavel.nome} logado com sucesso`);
return true;
} else console.log(`Nome de usuário ou senha inválidos`);
} else console.log(`${autenticavel} não é um cliente válido`)
}
static ehAutenticavel(autenticavel) {
if (autenticavel instanceof Object) {
return "autenticar" in autenticavel && autenticavel.autenticar instanceof Function;
} else return false;
}
}
Minha dúvida é: Apesar de ter resolvido o problema, esse seria a melhor prática?