Fácil TypeScript

Classe Pessoa com parameter properties

Enunciado

Crie uma classe Pessoa que tenha uma propriedade nome (pública e readonly) e uma propriedade idade (privada). O construtor deve usar parameter properties para declarar e inicializar ambas. Adicione um método público apresentar() que imprime Olá, meu nome é [nome] e tenho [idade] anos..

Requisitos

  • Usar parameter properties no construtor.
  • nome deve ser public readonly.
  • idade deve ser private.
  • O método apresentar() deve ser público e imprimir a frase exata.

Código inicial

// Crie a classe Pessoa aqui

Saída esperada

Olá, meu nome é Ana e tenho 30 anos.
Ver dica

No construtor, declare os parâmetros com public readonly nome: string e private idade: number. O corpo do construtor pode ficar vazio.

Mostrar solução
class Pessoa {
  // Parameter properties: public readonly e private
  constructor(
    public readonly nome: string,
    private idade: number
  ) {}

  public apresentar(): void {
    console.log(`Olá, meu nome é ${this.nome} e tenho ${this.idade} anos.`);
  }
}

// Teste
const p = new Pessoa("Ana", 30);
p.apresentar();

Passo a passo

  1. Declaramos a classe Pessoa.
  2. No construtor, usamos public readonly nome: string — isso cria automaticamente a propriedade nome, pública e somente leitura.
  3. Usamos private idade: number — cria a propriedade idade privada, acessível apenas dentro da classe.
  4. O corpo do construtor fica vazio porque as atribuições são feitas automaticamente pelas parameter properties.
  5. O método apresentar() é público (padrão) e acessa this.nome e this.idade para montar a mensagem.
  6. Instanciamos Pessoa e chamamos apresentar().

Por que funciona

Parameter properties economizam código: sem elas, teríamos que declarar os campos fora do construtor e atribuí-los manualmente. O readonly impede que nome seja alterado depois da construção, e private em idade garante que só a própria classe a manipule.

Erros comuns

  • Esquecer o modificador no parâmetro: constructor(nome: string, idade: number) {} — isso não cria propriedades; this.nome dará erro.
  • Tentar alterar nome depois: p.nome = "Bia" — erro de compilação porque é readonly.
  • Acessar p.idade fora da classe — erro de compilação porque é private.

Outra forma de resolver

Declarar os campos explicitamente e atribuir no construtor:

class Pessoa {
  public readonly nome: string;
  private idade: number;
  constructor(nome: string, idade: number) {
    this.nome = nome;
    this.idade = idade;
  }
  // ...
}

Essa forma é preferível quando você precisa de lógica extra na atribuição.

Saída esperada

Olá, meu nome é Ana e tenho 30 anos.