Como usar classes TypeScript com exemplos simples

TypeScript traz recursos poderosos para JavaScript, incluindo o conceito de classes, que permite programação orientada a objetos. Classes fornecem um modelo para criar objetos, encapsular dados e definir comportamentos. Este guia o guiará pelos conceitos básicos de classes TypeScript com exemplos simples.

O que é uma classe?

Uma classe é um modelo para criar objetos com propriedades e métodos predefinidos. Ela ajuda a organizar o código, promover a reutilização e criar aplicativos escaláveis. As classes em TypeScript funcionam de forma semelhante às classes em outras linguagens de programação orientadas a objetos.

Definindo uma classe básica

Para definir uma classe em TypeScript, use a palavra-chave class seguida pelo nome da classe e um conjunto de chaves contendo propriedades e métodos.

Exemplo de classe básica

Abaixo está um exemplo de uma classe simples Person com propriedades e um método:

class Person {
  name: string;
  age: number;

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

  greet(): void {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person1 = new Person("Alice", 30);
person1.greet(); // Output: Hello, my name is Alice and I am 30 years old.

Neste exemplo, a classe Person tem duas propriedades: name e age. O método construtor inicializa essas propriedades, e o método greet emite uma mensagem de saudação.

Modificadores de acesso

O TypeScript fornece três modificadores de acesso para controlar a visibilidade dos membros da classe:

  • public: Os membros podem ser acessados ​​de qualquer lugar (padrão).
  • private: Os membros são acessíveis somente dentro da classe.
  • protected: Os membros são acessíveis dentro da classe e suas subclasses.

Usando modificadores de acesso

Veja como você pode usar modificadores de acesso em uma classe TypeScript:

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;
  }
}

const dog = new Animal("Buddy", 5);
console.log(dog.name); // Output: Buddy
console.log(dog.getAge()); // Output: 5
// console.log(dog.age); // Error: 'age' is private and only accessible within class 'Animal'.

Neste exemplo, nome é uma propriedade pública, acessível de fora da classe, enquanto idade é uma propriedade privada, acessível somente dentro da classe.

Herança em TypeScript

TypeScript suporta herança, o que permite que uma classe herde propriedades e métodos de outra classe. Isso ajuda a reutilizar código e criar uma hierarquia de classes.

Exemplo de herança

Abaixo está um exemplo de uma classe Cachorro que herda de uma classe base Animal:

class Animal {
  constructor(public name: string) {}

  makeSound(): void {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name); // Call the constructor of the base class
  }

  makeSound(): void {
    console.log(`${this.name} barks.`);
  }
}

const dog = new Dog("Buddy");
dog.makeSound(); // Output: Buddy barks.

Neste exemplo, a classe Dog estende a classe Animal e substitui o método makeSound.

Getters e Setters

O TypeScript permite que você defina getters e setters para propriedades, fornecendo acesso controlado aos membros da classe.

Exemplo de Getters e Setters

class Person {
  private _name: string;

  constructor(name: string) {
    this._name = name;
  }

  get name(): string {
    return this._name;
  }

  set name(newName: string) {
    if (newName) {
      this._name = newName;
    } else {
      console.log("Name cannot be empty.");
    }
  }
}

const person = new Person("Alice");
console.log(person.name); // Output: Alice
person.name = "Bob";
console.log(person.name); // Output: Bob

Neste exemplo, a propriedade name é acessada e modificada usando métodos getter e setter.

Conclusão

As classes TypeScript são uma maneira poderosa de escrever código orientado a objetos de forma limpa e eficiente. Elas fornecem uma maneira estruturada de definir propriedades, métodos, modificadores de acesso, herança e muito mais. Ao entender como usar classes TypeScript, você pode escrever código mais robusto e sustentável para seus aplicativos.