1
resposta

[Dúvida] dúvida a respeito da resposta certa

eu pensava que o erro era pq a propriedade nome estava incorreta, que ela deveria ter sido digitada assim "_nome" mas segundo a resposta é por causa do (private), isso me deixou confuso. Apesar de ter acertado a alternativa sinto que acertei por sorte e nao por ter compreendido o conteúdo totalmente.

1 resposta

Boa, Carlos! E olha, o fato de você ter parado pra questionar mesmo tendo acertado mostra que você tá no caminho certo — entender o porquê é muito mais valioso do que só acertar.

Vamos lá: o underline antes do nome (tipo _nome) é só uma convenção, um costume que programadores adotaram pra indicar visualmente "ei, essa propriedade é privada, não mexa nela de fora." Mas isso é só um acordo entre humanos — pro JavaScript e pro TypeScript, _nome é uma variável como qualquer outra. O underline não faz nada de especial tecnicamente.

Já o private é diferente. Ele é um modificador de acesso do TypeScript, uma palavra-chave que efetivamente diz pro compilador: "essa propriedade só pode ser acessada de dentro da classe." Se alguém tentar acessar de fora, o TypeScript vai reclamar e apontar um erro de compilação.

Então na alternativa correta:

class Pessoa {
    private nome;  // TypeScript vai proteger isso de verdade
    idade;

    constructor(nome, idade) {
        this.nome = nome;
        this.idade = idade;
    }
}

let pessoa = new Pessoa('Barney', 18);
pessoa.nome = 'Martin';  // ERRO! TypeScript não deixa acessar

O erro acontece porque nome foi declarado com private, e lá embaixo o código tenta acessar pessoa.nome de fora da classe. O TypeScript barra isso.

Então é isso: _nome é só um lembrete visual pra gente, tipo uma plaquinha de "não entre." Já o private é a tranca de verdade — é ele que o TypeScript usa pra barrar o acesso. E dá pra usar os dois juntos, tipo private _nome, mas quem faz o trabalho pesado é o private, não o underline. Tranquilo?