TypeScript - Propriedades Somente Leitura: Um Guia para Iniciantes
Olá, futuro superestrela de programação! Hoje, vamos mergulhar no maravilhoso mundo do TypeScript e explorar uma de suas poderosas funcionalidades: propriedades somente leitura. Não se preocupe se você é novo em programação; Eu vou ser seu guia amigável nesta emocionante jornada. Então, pega sua bebida favorita, conforte-se, e vamos juntos embarcar nesta aventura TypeScript!
O que são Propriedades Somente Leitura?
Antes de entrarmos nos detalhes, vamos entender o que são propriedades somente leitura. Imagine que você tem um heirloom precioso da família - talvez um belo relógio antigo. Você pode olhar para ele, admirá-lo, mas não pode mudá-lo. Isso é exatamente o que as propriedades somente leitura são no TypeScript - valores que você pode ver e usar, mas não pode modificar após serem definidos.
Sintaxe
Vamos começar com o básico. Como declaramos uma propriedade somente leitura? É tão simples quanto adicionar a palavra-chave readonly
antes do nome da propriedade. Aqui está um exemplo básico:
class Heirloom {
readonly name: string;
constructor(name: string) {
this.name = name;
}
}
const familyWatch = new Heirloom("Relógio do Avô");
console.log(familyWatch.name); // Saída: Relógio do Avô
// familyWatch.name = "Novo Relógio"; // Erro! Não pode modificar uma propriedade readonly
Neste exemplo, uma vez que definimos o name
no construtor, não podemos mudá-lo posteriormente. É como selar o nome do nosso heirloom familiar no tempo!
Propriedades Somente Leitura com Interfaces
Interfaces no TypeScript são como protótipos para objetos. Podemos usar propriedades somente leitura em interfaces também. Vamos ver como:
interface ReadonlyPerson {
readonly name: string;
readonly age: number;
}
const person: ReadonlyPerson = {
name: "Alice",
age: 30
};
console.log(person.name); // Saída: Alice
// person.age = 31; // Erro! Não pode modificar uma propriedade readonly
Aqui, criamos uma interface ReadonlyPerson
onde tanto name
quanto age
são somente leitura. Uma vez que criamos um objeto baseado nesta interface, não podemos mudar essas propriedades. É como criar uma carteira de identidade - uma vez impressa, você não pode simplesmente apagar a idade e escrever uma nova!
Propriedades Somente Leitura com Classes
Classes são como protótipos para criar objetos com dados e comportamento. Vamos ver como as propriedades somente leitura funcionam em classes:
class Book {
readonly title: string;
readonly author: string;
private _pageCount: number;
constructor(title: string, author: string, pageCount: number) {
this.title = title;
this.author = author;
this._pageCount = pageCount;
}
get pageCount(): number {
return this._pageCount;
}
addPages(pages: number) {
this._pageCount += pages;
}
}
const myBook = new Book("TypeScript 101", "Jane Doe", 200);
console.log(myBook.title); // Saída: TypeScript 101
myBook.addPages(50);
console.log(myBook.pageCount); // Saída: 250
// myBook.title = "JavaScript 101"; // Erro! Não pode modificar uma propriedade readonly
Neste exemplo, title
e author
são somente leitura, mas ainda podemos modificar pageCount
através de um método. É como um livro - uma vez impresso, você não pode mudar o título ou o autor, mas pode adicionar páginas (talvez em uma edição revisada).
Propriedades Somente Leitura com Aliases de Tipos
Aliases de tipos são como apelidos para tipos. Podemos usar propriedades somente leitura com eles também:
type ReadonlyPoint = {
readonly x: number;
readonly y: number;
};
const point: ReadonlyPoint = { x: 10, y: 20 };
console.log(point.x, point.y); // Saída: 10 20
// point.x = 30; // Erro! Não pode modificar uma propriedade readonly
Aqui, criamos um tipo ReadonlyPoint
onde tanto x
quanto y
são somente leitura. É como definir coordenadas em um mapa - uma vez posicionadas, você não pode mover o ponto!
Const vs. Propriedades Somente Leitura
Agora, você pode estar se perguntando, "Qual a diferença entre const
e readonly
?"ótima pergunta! Vamos desmistificar:
const PI = 3.14159;
// PI = 3.14; // Erro! Não pode reatribuir uma variável const
class Circle {
readonly radius: number;
constructor(radius: number) {
this.radius = radius;
}
}
const circle = new Circle(5);
// circle.radius = 10; // Erro! Não pode modificar uma propriedade readonly
const
é usado para variáveis que não podem ser reatribuídas. readonly
é usado para propriedades que não podem ser alteradas após a inicialização. Pense em const
como uma promessa de não mudar o recipiente, enquanto readonly
é uma promessa de não mudar o conteúdo.
Quando Usar Propriedades Somente Leitura
Então, quando você deve usar propriedades somente leitura? Aqui estão alguns cenários comuns:
- Quando você tem valores que não devem mudar após a inicialização.
- Para objetos de configuração que devem permanecer constantes.
- Para evitar modificações acidentais em grandes bases de código.
- Quando se trabalha com estruturas de dados imutáveis.
Aqui está uma tabela resumindo os métodos que discutimos:
Método | Descrição | Exemplo |
---|---|---|
Com Interfaces | Definir propriedades somente leitura em protótipos de objetos | interface ReadonlyPerson { readonly name: string; } |
Em Classes | Criar propriedades de classe que não podem ser modificadas após a inicialização | class Book { readonly title: string; } |
Com Aliases de Tipos | Definir propriedades somente leitura em tipos personalizados | type ReadonlyPoint = { readonly x: number; readonly y: number; } |
Const vs Readonly | Use const para variáveis, readonly para propriedades | const PI = 3.14; class Circle { readonly radius: number; } |
Lembre-se, usar propriedades somente leitura é como definir regras para o seu futuro selvagem e outros desenvolvedores. Isso ajuda a prevenir erros e torna seu código mais previsível e mantível.
E é isso, meus queridos estudantes! Nós fizemos uma jornada através da terra das propriedades somente leitura no TypeScript. Espero que este guia tenha iluminado o caminho para vocês. Lembre-se, a prática leva à perfeição, então não tenha medo de experimentar esses conceitos em seus próprios projetos. Feliz programação, e que suas propriedades somente leitura sempre permaneçam fiéis aos seus valores!
Credits: Image by storyset