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).
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:
// 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:
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:
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
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.
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
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).
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
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'.
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
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.
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