Propriedades

Propriedades de classes em TypeScript são atributos associados a cada instância de uma classe, fortemente tipados e acessíveis conforme as suas regras de visibilidade. A sua declaração e uso são semelhantes ao JavaScript, mas com tipagem estática e recursos como visibilidade, inicialização, métodos get/set, opcionais e somente leitura.

Conceito de Propriedades

As propriedades define o estado do objeto (ex: nome, idade, status), sendo declarada diretamente no escopo da classe, geralmente acompanhada de um tipo.

class Pessoa {
nome: string;
idade: number;
estaVivo: boolean;
}

Neste exemplo, nome, idade e estaVivo são propriedades obrigatórias da classe Pessoa.

Inicialização: Construtores

Propriedades podem ser inicializadas pelo construtor usando o this para aceder cada propriedade.

class Pessoa {
nome: string;
idade: number;
estaVivo: boolean;

constructor(nome: string, idade: number, estaVivo: boolean) {
this.nome = nome;
this.idade = idade;
this.estaVivo = estaVivo;
}
}

const p = new Pessoa("Ana", 25, true);

Se um valor de tipo diferente for atribuído, TypeScript gera um erro de tipo.

Propriedades com valores padrão

Também é possível definir valores padrão para propriedades diretamente:

class Produto {
nome: string = "Sem nome";
preco: number = 0.0;
}

Se um valor for informado no construtor, ele sobrescreve o padrão.

Modificadores de Acesso

O TypeScript permite controlar o acesso às propriedades com os modificadores public, private e protected:

  • public: acesso liberado (padrão)
  • private: acesso só dentro da própria classe
  • protected: acesso na classe e subclasses
class ContaBancaria {
private saldo: number;

constructor(saldoInicial: number) {
this.saldo = saldoInicial;
}

consultarSaldo() {
return this.saldo;
}
}

Fora da classe, não é possível aceder diretamente saldo.

Propriedades Somente Leitura

Use o modificador readonly para propriedades que não podem ser alteradas depois da inicialização:

class Documento {
readonly numero: string;

constructor(numero: string) {
this.numero = numero;
}
}

Tentativas de atribuir novo valor a uma propriedade readonly após a criação resultam em erro.

Utilitário Readonly<T>

TypeScript fornece o tipo utilitário Readonly<T>, que transforma todas as propriedades de um tipo em readonly:

typescripttype Config = {
  ambiente: string;
  porta: number;
};

const conf: Readonly<Config> = { ambiente: "prod", porta: 8080 };
// conf.porta = 80; // Erro!

Assim, todo o objeto conf fica imutável para escrita.

Propriedades Opcionais

Propriedades de classe podem ser marcadas como opcionais usando ?, tornando possível criar objetos sem defini-las imediatamente:

class Cliente {
nome: string;
email?: string;
}

O parâmetro email pode ser omitido ao instanciar um Cliente.

Getters e Setters

Para encapsular o acesso e modificação de propriedades, utilize métodos ou as palavras-chave get e set:

class Pessoa {
private _nome: string = "Sem nome";

get nome(): string {
return this._nome;
}

set nome(valor: string) {
this._nome = valor;
}
}

const p = new Pessoa();
p.nome = "Carlos";
console.log(p.nome);

Os métodos get/set permitem aceder p.nome como se fosse um campo.

Exemplo Completo

class Aluno {
readonly matricula: number;
nome: string;
private _nota: number = 0;

constructor(matricula: number, nome: string) {
this.matricula = matricula;
this.nome = nome;
}

get nota() {
return this._nota;
}

set nota(valor: number) {
if (valor >= 0 && valor <= 10) {
this._nota = valor;
}
}
}

const a = new Aluno(1, "Julia");
a.nota = 9;
console.log(a.matricula, a.nome, a.nota);

Esse exemplo combina propriedades readonly, privadas, get/set e inicialização por construtor, representando um padrão robusto de uso em TypeScript.