As classes do Ty­peS­cript oferecem uma forma clara e es­tru­tu­rada de organizar dados e com­por­ta­men­tos dentro de um objeto. Dessa forma, é possível modelar entidades e conceitos no código de maneira mais fácil e com­pre­en­sí­vel.

Para que servem as aulas de Ty­peS­cript?

As classes são fun­da­men­tais na linguagem de pro­gra­ma­ção Ty­peS­cript, que é baseada em Ja­vaS­cript. Elas fornecem um método es­tru­tu­rado para definir objetos e aplicar a pro­gra­ma­ção orientada a objetos (OOP). As classes do Ty­peS­cript são como uma espécie de planos para a criação de objetos, que agrupam dados e métodos re­la­ci­o­na­dos de maneira lógica.

O Ty­peS­cript contém todas as funções do Ja­vaS­cript e inclui tipagem estática, o que permite es­pe­ci­fi­car tipos de dados para funções no Ty­peS­cript, variáveis e classes, bem como detectar erros em tempo de com­pi­la­ção. Além da segurança de tipos, as classes do Ty­peS­cript também suportam conceitos como herança e abstração, o que facilita o de­sen­vol­vi­mento de apli­ca­ções complexas.

As classes do Ty­peS­cript permitem es­ta­be­le­cer uma hi­e­rar­quia clara de classes que herdam pro­pri­e­da­des e métodos. Isso incentiva a reu­ti­li­za­ção e a es­tru­tu­ra­ção do código. Os cons­tru­to­res nas classes pos­si­bi­li­tam a ini­ci­a­li­za­ção de ins­tân­cias e garantem uma criação de objetos con­sis­tente.

A sintaxe das classes do Ty­peS­cript

A sintaxe das classes no Ty­peS­cript é se­me­lhante à do EC­MAS­cript 6 (ES6) e é uma versão ampliada da sintaxe das classes do Ja­vaS­cript. Uma classe pode conter vários elementos para definir a estrutura e o com­por­ta­mento dos objetos. Estes são os seus prin­ci­pais com­po­nen­tes:

  • Pro­pri­e­da­des,
  • cons­tru­tor e
  • métodos.

Pro­pri­e­da­des

As pro­pri­e­da­des ou pro­per­ties de­ter­mi­nam o estado de um objeto. Elas armazenam valores de dados e podem ser anotadas com tipos de dados para garantir que contenham apenas valores válidos.

class ClassName {
    propertyName: propertyType;
}
ty­pes­cript
  • ClassName: o nome da classe.
  • pro­perty­Name: o nome da pro­pri­e­dade que pretende definir.
  • pro­pertyType: o tipo de dados da pro­pri­e­dade.

Veja este exemplo:

class Person {
    name: string;
}
ty­pes­cript

Primeiro, define-se uma classe chamada Person (pessoa) com uma pro­pri­e­dade de­no­mi­nada name (nome) do tipo string. Isso significa que as ins­tân­cias da classe Person têm uma pro­pri­e­dade name que armazena cadeias de texto (strings).

Cons­tru­tor

O cons­tru­tor em Ty­peS­cript é um método especial que é chamado ao criar uma instância (um objeto) de uma classe. Ele é usado para ini­ci­a­li­zar as pro­pri­e­da­des (pro­per­ties) de um objeto. Ba­si­ca­mente, o cons­tru­tor define o estado inicial de uma instância. Você pode es­pe­ci­fi­car pa­râ­me­tros no cons­tru­tor para passar valores ao ins­tan­ciar classes de Ty­peS­cript.

A estrutura básica de um cons­tru­tor em Ty­peS­cript tem a seguinte aparência:

class ClassName {
    constructor(parameter1: Type1, parameter2: Type2, ...) {
    }
}
ty­pes­cript
  • cons­tru­tor: cada classe pode ter apenas um cons­tru­tor. Se nenhum for definido, um cons­tru­tor vazio é criado por padrão.
  • parâmetro: Tipo: os pa­râ­me­tros podem ser ne­ces­sá­rios ou não, de­pen­dendo do que a classe precisa fazer. É útil indicar que tipo de dados se espera para cada parâmetro.

Aqui apre­sen­ta­mos um exemplo de cons­tru­tor:

class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
ty­pes­cript

No exemplo anterior, a classe Person tem um cons­tru­tor que aceita dois pa­râ­me­tros: firstName (nome) e lastName (sobrenome). Ao criar uma instância dessa classe, esses pa­râ­me­tros são passados e o cons­tru­tor ini­ci­a­liza as pro­pri­e­da­des firstName e lastName da instância com os valores cor­res­pon­den­tes. A palavra-chave this refere-se à instância atual da classe na qual o código está a ser executado.

Métodos

Em Ty­peS­cript, os métodos são funções que podem ser definidas nas classes e aplicadas às suas ins­tân­cias. Com eles, é possível realizar de­ter­mi­na­das ações ou operações no contexto de uma classe.

class ClassName {
    // ...
    methodName(parameter1: Type1, parameter2: Type2, ...): ReturnType {
    }
    // ...
}
ty­pes­cript
  • method­Name: nome do método.
  • parameter: Tipo: pa­râ­me­tros opcionais que o método aceita.
  • Re­turnType: é o tipo de dados que determina qual valor o método retorna. Se o método não retorna nada, pode es­pe­ci­fi­car void.

Para chamar uma pro­pri­e­dade ou um método numa instância de uma classe, utilize o operador ponto . seguido do nome do método e dos ar­gu­men­tos ne­ces­sá­rios, se o método esperar pa­râ­me­tros.

class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    getFullName(): string {
        return this.firstName + " " + this.lastName;
    }
}
const person = new Person("John", "Doe");
const fullName = person.getFullName();
ty­pes­cript

O método getFullName serve para criar o nome completo da pessoa e devolvê-lo. Recorre aos valores das pro­pri­e­da­des firstName e lastName que foram definidas na classe e ini­ci­a­li­za­das no cons­tru­tor. O objeto person é gerado uti­li­zando a palavra-chave new seguida do nome da classe e dos pa­râ­me­tros cor­res­pon­den­tes. Quando o método é chamado, ele concatena as duas cadeias e retorna o nome completo como uma cadeia ou string. Portanto, a saída para o objeto person é “John Doe”.

Exemplos de aplicação das classes do Ty­peS­cript

As classes do Ty­peS­cript têm vários me­ca­nis­mos para organizar e controlar a estrutura e o com­por­ta­mento dos objetos. A seguir, apre­sen­ta­mos alguns conceitos para sua uti­li­za­ção.

Vi­si­bi­li­dade

A vi­si­bi­li­dade nas classes do Ty­peS­cript controla o acesso às pro­pri­e­da­des e métodos dentro e fora da classe. O Ty­peS­cript fornece três mo­di­fi­ca­do­res de vi­si­bi­li­dade: public, private e protected.

  • público (padrão): as pro­pri­e­da­des e métodos marcados com public podem ser chamados de qualquer lugar, tanto dentro como fora da classe.
  • private: refere-se a pro­pri­e­da­des e métodos que só podem ser chamados dentro da própria classe. São ina­ces­sí­veis para partes de código externas.
  • protected: as pro­pri­e­da­des e métodos marcados com protected podem ser chamados pela própria classe e pelas classes derivadas (por herança), mas não por código externo.
class Person {
    private socialSecurityNumber: string;
    constructor(ssn: string) {
        this.socialSecurityNumber = ssn;
    }
    greet() {
        console.log("Hello, I am a person with SSN: " + this.socialSecurityNumber);
    }
}
const person = new Person("123-45-6789");
person.greet();
ty­pes­cript

No exemplo anterior, socialSecurityNumber (número da Segurança Social) é uma pro­pri­e­dade privada que só pode ser acedida dentro da classe Person. Em con­tra­par­tida, o método greet pode ser chamado a partir do exterior.

Herencia

A herança é um conceito fun­da­men­tal na pro­gra­ma­ção orientada a objetos (POO) que é usado no Ty­peS­cript e em muitas outras lin­gua­gens de pro­gra­ma­ção web. Ela permite criar uma nova classe a partir de uma classe base ou su­per­classe existente. A classe derivada (subclasse) herda as pro­pri­e­da­des e métodos da classe base e pode ampliá-los ou adaptá-los.

class Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    makeSound() {
        console.log("Some generic sound");
    }
}
class Dog extends Animal {
    makeSound() {
        console.log(this.name + " barks");
    }
}
const myDog = new Dog("Buddy");
myDog.makeSound();
ty­pes­cript

No código anterior, a classe Dog (cão) herda da classe base Animal uti­li­zando a palavra-chave extends. A classe derivada Dog so­bres­creve o método makeSound para adicionar um com­por­ta­mento es­pe­cí­fico enquanto assume a pro­pri­e­dade name de Animal.

Somente leitura

Ao utilizar a palavra-chave readonly, pode declarar pro­pri­e­da­des das classes Ty­peS­cript ou objetos como somente leitura. Isso significa que, uma vez que uma pro­pri­e­dade é ini­ci­a­li­zada como somente leitura, o seu valor não poderá ser alterado pos­te­ri­or­mente.

class Circle {
    readonly pi: number = 3.14159;
    radius: number;
    constructor(radius: number) {
        this.radius = radius;
    }
    getArea() {
        return this.pi    *this.radius*    this.radius;
    }
}
const myCircle = new Circle(5);
console.log(myCircle.getArea()); // Output: ≈ 78,54
ty­pes­cript

Neste exemplo, a pro­pri­e­dade pi é somente leitura e é ini­ci­a­li­zada no cons­tru­tor. Após a ini­ci­a­li­za­ção, pi não pode ser mo­di­fi­cada. Se você tentar modificar o valor de pi após a ini­ci­a­li­za­ção, o Ty­peS­cript gerará um erro de com­pi­la­ção.

Ir para o menu principal