0% Concluído
0/0 Steps
  1. Introdução ao TypeScript
    5 Tópicos
    |
    1 Teste
  2. Configuração e Instalação
    4 Tópicos
    |
    1 Teste
  3. Fundamentos do TypeScript
    6 Tópicos
    |
    1 Teste
  4. Tipos Avançados
    10 Tópicos
    |
    1 Teste
  5. Funções em TypeScript
    5 Tópicos
    |
    1 Teste
  6. Tipos de Objetos e Aliases
    5 Tópicos
    |
    1 Teste
  7. Interfaces
    5 Tópicos
    |
    1 Teste
  8. Classes em TypeScript
    7 Tópicos
    |
    1 Teste
  9. Genéricos
    4 Tópicos
    |
    1 Teste
  10. Módulos
    5 Tópicos
    |
    1 Teste
  11. Compilador TypeScript
    2 Tópicos
    |
    1 Teste
  12. Encerramento
Módulo 8, Tópico 2
Em andamento

Construtores e Campos de Classe

Módulo Progresso
0% Concluído

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: string
  • idade?: 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: string
  • autor: string
  • anoPublicacao: number
  • readonly 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: number
  • data: Date
  • descricao?: 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.