Pular para o conteúdo principal
Módulo 4 · Lição 1 de 27/14 no curso~15 min
Lições do módulo (1/2)

Classes e modificadores

TypeScript estende classes ES6 padrão com recursos poderosos de Programação Orientada a Objetos (OOP), como digitação estática, modificadores de acesso e propriedades de parâmetros abreviados.

Classes e modificadores de acesso

No TypeScript, você pode controlar a visibilidade dos membros da classe, propriedades e métodos usando três palavras-chave principais:

  • public (padrão): o membro é acessível de qualquer lugar.
  • private: o membro é acessível somente dentro da classe que o define.
  • protected: o membro é acessível dentro da classe e suas subclasses (herança).
TS
class Animal {
  public name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public getAge(): number {
    return this.age;
  }
}

Propriedades dos parâmetros

TypeScript oferece uma sintaxe abreviada para declarar e inicializar um membro da classe diretamente no construtor. Ao prefixar um parâmetro do construtor com um modificador de acesso, a propriedade é automaticamente criada e atribuída:

TS
// This syntax does exactly the same as the previous example!
class Animal {
  constructor(
    public name: string,
    private age: number,
  ) {}
}

Implementando Interfaces

Uma classe pode implementar uma ou mais interfaces usando a palavra-chave implements. Isso garante que a classe siga um contrato específico, definindo todos os métodos e propriedades necessários:

TS
interface Flyable {
  fly(altitude: number): void;
}

class Bird implements Flyable {
  constructor(public name: string) {}

  fly(altitude: number): void {
    console.log(`${this.name} is flying at ${altitude} meters.`);
  }
}

Herança e super

TypeScript oferece suporte total à herança de classe. Uma classe pode estender outra classe usando a palavra-chave extends. Se a subclasse definir um construtor, ela deverá chamar o construtor da classe base usando a função super() antes de acessar this:

TS
class Person {
  constructor(public name: string) {}
}

class Student extends Person {
  constructor(
    name: string,
    public grade: number,
  ) {
    super(name); // Calls the Person constructor
  }
}

Experimente você mesmo

Exercício 1: Classe de Carro e Modificador Privado

Exercício#ts.m4.l1.e1
Tentativas: 0Carregando…

Declare uma classe chamada Carro. Ele deve ter uma propriedade de modelo somente leitura (string) definida no construtor, uma propriedade privada de milhagem (número) inicializada em 0, um método público drive(miles: number): void que incrementa a milhagem em milhas e um getter ou método getMileage(): number que retorna milhagem.

Carregando editor…
Mostrar dica

Use milhagem privada: número = 0; para tornar a variável privada e constructor(public readonly model: string) {} como abreviação.

Solução disponível após 3 tentativas

Exercício 2: Interface de Forma e Classe Círculo

Exercício#ts.m4.l1.e2
Tentativas: 0Carregando…

Complete o código implementando a classe Circle que implementa a interface Shape. A classe deve ter uma propriedade radius somente leitura (número) definida via construtor e implementar getArea(): number (retornando Math.PI * radius * radius).

Carregando editor…
Mostrar dica

Use implementa Shape na classe Circle e defina o método getArea(): number.

Solução disponível após 3 tentativas

Exercício 3: Classe Abstrata de Veículos e Subclasse de Motocicleta

Exercício#ts.m4.l1.e3
Tentativas: 0Carregando…

Declare uma classe chamada Motorcycle que estende a classe abstrata Vehicle. Deve implementar o método start() para retornar a string 'Motorcycle' seguida do make (this.make) e 'started'.

Carregando editor…
Mostrar dica

Use a classe Motorcycle extends Vehicle e implemente o método start(): string que retorna a string correta.

Solução disponível após 3 tentativas

Exercício 4: Propriedades e Herança dos Parâmetros

Exercício#ts.m4.l1.e4
Tentativas: 0Carregando…

Crie uma classe chamada Employee que defina um ID de propriedade somente leitura (número) e um nome de propriedade pública (string) usando a abreviação do construtor. Em seguida, crie uma classe Developer que estenda Employee e adicione um departamento de propriedade pública (string) por meio do construtor.

Carregando editor…
Mostrar dica

Use super(id, name) no construtor Developer e use public Department para definir a propriedade por meio do construtor.

Solução disponível após 3 tentativas