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

Criando e acessando o nome da minha Enum

Bom dia!

Meu exemplo é o seguinte, tenho uma classe Person que tem uma propriedade PersonNature.

Para tal, criei uma Enum:

enum PersonNature {  
    FISICA = 'F',  
    JURIDICA = 'J'  
}  

class Person {  
    name: string  
    personNature: PersonNature  
    
    construtor(name: string, personNature: string) {  
    }  
}

Como faço para que, no construtor, ao receber 'F', ele crie um enum do tipo FISICA?

Obs.: Vou fazer alguns paralelos com PHP pois é a linguagem que domino.

Em PHP, por exemplo, é feito assim:$person->setPersonNature(PersonNature::from('F'))

Outra questão é, como recupero o nome desse Enum depois ao usar minha classe?

Fazendo o paralelo novamente, com PHP, seria assim:$person->getPersonNature->name //Isso retornaria FISICA

Desde já, muito obrigado.

2 respostas
solução!

E aí, Daniel! No TypeScript, você pode criar um método estático na sua enum para lidar com essa situação e também criar um método na classe Person para obter o nome da enum.

enum PersonNature {  
    FISICA = 'F',  
    JURIDICA = 'J'  
}  

class Person {  
    name: string  
    personNature: PersonNature  
    
    constructor(name: string, personNature: string) {
        this.name = name;
        this.personNature = PersonNature.from(personNature);
    }

    getPersonNatureName(): string {
        return PersonNature[this.personNature];
    }
}

namespace PersonNature {
    export function from(value: string): PersonNature {
        switch (value) {
            case 'F':
                return PersonNature.FISICA;
            case 'J':
                return PersonNature.JURIDICA;
            default:
                throw new Error('Tipo de pessoa inválido');
        }
    }
}


const pessoa = new Person('João', 'F');
console.log(pessoa.getPersonNatureName()); // Isso vai retornar 'FISICA'

No código acima, adicionei um método from à enum PersonNature, que converte a string recebida em um valor da enum correspondente. No construtor da classe Person, eu uso esse método para atribuir o valor correto à propriedade personNature. E para obter o nome da enum, adicionei o método getPersonNatureName que retorna o nome associado ao valor atual da enum.

Muito obrigado Estudante. Pensei que tivesse algo nativo mas, pelo visto, não tem.