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.
