Nesta aula, você aprenderá sobre a importância dos construtores e campos de classe em TypeScript e como utilizá-los eficazmente em seus projetos.
Os construtores são métodos especiais em uma classe TypeScript que são chamados quando um objeto da classe é criado. Eles são usados para inicializar as propriedades do objeto e executar qualquer lógica de inicialização necessária. Os campos de classe são variáveis declaradas dentro de uma classe que representam propriedades dos objetos criados a partir dessa classe.
Declarando um Construtor
Em TypeScript, você declara um construtor usando a palavra-chave constructor. O construtor é um método especial que não possui um nome de função, e ele é executado automaticamente quando um objeto da classe é instanciado.
Sintaxe:
class MinhaClasse {
constructor(parametro1: tipo1, parametro2: tipo2) {
// Inicialize os campos de classe e faça qualquer lógica de inicialização aqui
}
}
Dentro do construtor, você pode inicializar os campos de classe e realizar qualquer outra lógica necessária para configurar o objeto.
Declarando Campos de Classe
Campos de classe são variáveis declaradas dentro da classe e estão associados a cada instância da classe. Eles representam as propriedades dos objetos criados a partir dessa classe.
Sintaxe:
class MinhaClasse {
campo1: tipo1;
campo2: tipo2;
constructor(parametro1: tipo1, parametro2: tipo2) {
this.campo1 = parametro1;
this.campo2 = parametro2;
}
}
Dentro da classe, você declara campos de classe simplesmente atribuindo valores a eles no construtor ou em outros métodos da classe.
Exemplo de Construtor Simples
Neste exemplo, vamos criar uma classe Pessoa com um construtor simples que inicializa o nome da pessoa.
class Pessoa {
nome: string;
constructor(nome: string) {
this.nome = nome;
}
}
// Instanciando um objeto Pessoa
const pessoa1 = new Pessoa("Alice");
console.log(pessoa1.nome); // Saída: Alice
Aqui, o construtor Pessoa aceita um parâmetro nome e inicializa o campo nome da classe com o valor passado.
Construtor Padrão e Campos Opcionais
Podemos criar um construtor padrão e campos opcionais em uma classe. Vamos criar uma classe Produto com um construtor que aceita um nome e um preço, mas o campo descricao é opcional.
class Produto {
nome: string;
preco: number;
descricao?: string;
constructor(nome: string, preco: number, descricao?: string) {
this.nome = nome;
this.preco = preco;
this.descricao = descricao;
}
}
const produto1 = new Produto("Celular", 999.99);
console.log(produto1); // Saída: { nome: 'Celular', preco: 999.99 }
const produto2 = new Produto("Laptop", 1499.99, "Laptop de última geração");
console.log(produto2); // Saída: { nome: 'Laptop', preco: 1499.99, descricao: 'Laptop de última geração' }
Neste exemplo, o campo descricao é opcional, o que significa que podemos criar instâncias da classe Produto com ou sem esse campo.
Construtores com Parâmetros Opcionais
Em TypeScript, podemos criar construtores com parâmetros opcionais usando o operador ?. Isso permite que você crie instâncias da classe sem fornecer todos os argumentos no construtor.
class Pessoa {
nome: string;
idade?: number;
constructor(nome: string, idade?: number) {
this.nome = nome;
this.idade = idade;
}
}
const pessoa1 = new Pessoa("Alice");
const pessoa2 = new Pessoa("Bob", 30);
console.log(pessoa1); // Saída: { nome: 'Alice' }
console.log(pessoa2); // Saída: { nome: 'Bob', idade: 30 }
Neste exemplo, o parâmetro idade é opcional, o que significa que podemos criar uma instância da classe Pessoa com ou sem fornecer a idade.
Campos de Classe Readonly
Às vezes, é desejável ter campos de classe que não podem ser modificados após a inicialização. Você pode usar a palavra-chave readonly para declarar tais campos.
class Carro {
readonly modelo: string;
constructor(modelo: string) {
this.modelo = modelo;
}
}
const meuCarro = new Carro("Sedan");
console.log(meuCarro.modelo); // Saída: Sedan
// Tentativa de modificar o campo readonly
// Isso resultará em um erro em tempo de compilação.
meuCarro.modelo = "SUV";
Neste exemplo, o campo modelo da classe Carro é declarado como readonly, o que impede qualquer modificação após a inicialização.
Exercicios
Exercício 1: Construtor com Campos Opcionais
Crie uma classe chamada Cliente que represente um cliente de uma loja. A classe deve ter os seguintes campos:
nome: stringidade?: number(opcional)
Crie um construtor que aceite o nome do cliente e opcionalmente sua idade. Se a idade não for fornecida, ela deve ser definida como undefined. Em seguida, crie duas instâncias da classe Cliente, uma com idade e outra sem idade, e exiba as informações dos clientes no console.
Exercício 2: Campos de Classe Readonly
Crie uma classe chamada Livro que represente um livro. A classe deve ter os seguintes campos:
titulo: stringautor: stringanoPublicacao: numberreadonly isbn: string
Crie um construtor que aceite o título, autor, ano de publicação e ISBN do livro. O campo ISBN deve ser readonly. Em seguida, crie uma instância da classe Livro e tente modificar o campo ISBN após a inicialização. Registre o resultado no console.
Exercício 3: Construtores com Parâmetros Opcionais
Crie uma classe chamada Pedido que represente um pedido em um sistema de comércio eletrônico. A classe deve ter os seguintes campos:
id: numberdata: Datedescricao?: string(opcional)
Crie um construtor que aceite o ID do pedido, a data do pedido e opcionalmente uma descrição. Se a descrição não for fornecida, ela deve ser definida como undefined. Em seguida, crie duas instâncias da classe Pedido, uma com descrição e outra sem descrição, e exiba as informações dos pedidos no console.
Lembre-se de importar ou criar as dependências necessárias, como as classes Cliente, Livro e Pedido, para que os exercícios funcionem corretamente.
