Em Ty­peS­cript, classes permitem que dados sejam or­ga­ni­za­dos e tenham o com­por­ta­mento previsto, dentro de objetos. Assim sendo, classes es­tru­tu­ram dados de forma clara, além de fa­ci­li­ta­rem a modelagem de entidades e de conceitos em códigos.

O que são classes em Ty­peS­cript?

Classes são funções-chave do Ty­peS­cript, con­si­de­rado um su­per­con­junto do Ja­vaS­cript. Elas permitem que objetos sejam definidos de forma es­tru­tu­rada, prin­ci­pal­mente na pro­gra­ma­ção orientada a objetos (OOP). Classes em Ty­peS­cript são como rascunhos para a criação de objetos, que con­so­li­dam métodos e dados lo­gi­ca­mente re­la­ci­o­na­dos.

A linguagem de pro­gra­ma­ção Ty­peS­cript oferece todas as fun­ci­o­na­li­da­des do Ja­vaS­cript, somadas à pos­si­bi­li­dade de tipagem estática. A adição permite a es­pe­ci­fi­ca­ção de tipos de dados para variáveis, classes e funções Ty­peS­cript, ajudando a detectar erros durante o processo de com­pi­la­ção. Além da segurança de tipos, classes em Ty­peS­cript também suportam conceitos como herança e abstração, o que facilita ainda mais o de­sen­vol­vi­mento de apli­ca­ções complexas.

Se você fizer uso de classes em Ty­peS­cript, será capaz de criar hi­e­rar­quias de classe claras, com pro­pri­e­da­des e métodos herdados. Isso lhe permitirá, por exemplo, reu­ti­li­zar códigos e es­tru­tu­ras. Em classes, cons­tru­to­res pos­si­bi­li­tam a ini­ci­a­li­za­ção de ins­tân­cias, ga­ran­tindo que objetos sejam criados de forma con­sis­tente.

Sintaxe de classes em Ty­peS­cript

Em Ty­pes­cript, classes têm sintaxe se­me­lhante à do EC­MAS­cript 6 (ES6), já que não deixam de ser uma versão expandida das classes em Ja­vaS­cript. Uma classe em Ty­peS­cript pode incluir vários elementos para a definição da estrutura e do com­por­ta­mento de objetos. Os prin­ci­pais elementos de uma classe em Ja­vaS­Cript são:

  • Pro­pri­e­dade
  • Cons­tru­tor
  • Método

Pro­pri­e­dade

Uma pro­pri­e­dade (property) define o estado de um objeto. Ela armazena valores de dados e pode ser anotada com tipos de dados, com o objetivo de garantir que apenas valores válidos sejam atri­buí­dos, como mostra o exemplo abaixo:

class ClassName {
    propertyName: propertyType;
}
ty­pes­cript
  • ClassName: O nome da classe.
  • propertyName: O nome da pro­pri­e­dade a ser definida.
  • propertyType: O tipo de dado da pro­pri­e­dade.

Observe, a seguir, um exemplo de aplicação mais es­pe­cí­fico:

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

Nele, a classe Person é definida com a pro­pri­e­dade name, do tipo string. O código tem o objetivo de fazer com que as ins­tân­cias da classe Person tenham a pro­pri­e­dade name, que armazena cadeias de ca­rac­te­res (strings).

Cons­tru­tor

O cons­tru­tor é o método do Ty­peS­cript usado na criação de ins­tân­cias (objetos) de uma classe. Ele é útil para realizar a ini­ci­a­li­za­ção das pro­pri­e­da­des de um objeto, por exemplo. Es­sen­ci­al­mente, o cons­tru­tor define o estado inicial de uma instância. É possível es­pe­ci­fi­car pa­râ­me­tros no cons­tru­tor para passar valores ao ins­tan­ciar classes em Ty­peS­cript.

A sintaxe básica de um cons­tru­tor em Ty­peS­cript é a seguinte:

class ClassName {
    constructor(parameter1: Type1, parameter2: Type2, ...) {
    }
}
ty­pes­cript
  • constructor: Cada classe pode ter apenas um cons­tru­tor. Se nenhum cons­tru­tor for definido, um cons­tru­tor vazio será criado por padrão.
  • parameter: Type: Os pa­râ­me­tros são opcionais e dependem da classe e de seus re­qui­si­tos. Pa­râ­me­tros devem ser marcados com os res­pec­ti­vos tipos de dados.

Observe um exemplo de cons­tru­tor em Ty­peS­cript:

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

No código acima, a classe Person possui um cons­tru­tor que aceita dois pa­râ­me­tros: firstName e lastName. Com a criação de uma instância dessa classe, ambos os pa­râ­me­tros são passados, o que faz com que o cons­tru­tor ini­ci­a­lize as pro­pri­e­da­des firstName e lastName da instância, jun­ta­mente com os valores cor­res­pon­den­tes. A palavra-chave this faz re­fe­rên­cia à instância atual da classe na qual o código é executado.

Métodos

Em Ty­peS­cript, métodos são funções definidas dentro de classes, que podem ser aplicadas às res­pec­ti­vas ins­tân­cias. Métodos permitem que você execute ações ou operações es­pe­cí­fi­cas no contexto de uma classe. Veja:

class ClassName {
    // ...
    methodName(parameter1: Type1, parameter2: Type2, ...): ReturnType {
    }
    // ...
}
ty­pes­cript
  • methodName: O nome do método.
  • parameter: Type: Pa­râ­me­tros opcionais que o método aceita.
  • ReturnType: O tipo de dado que determina o valor que o método retornará. Para que o método não retorne nenhum valor, es­pe­ci­fi­que void.

Para acessar uma pro­pri­e­dade ou chamar um método em uma instância de uma classe em Ty­peS­cript, use o operador ponto (.), seguido pelo nome do método e pelos ar­gu­men­tos cor­res­pon­den­tes, caso o método necessite de 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

No código acima, a função getFullName foi aplicada para criar e retornar o nome completo da pessoa so­li­ci­tada. Para tanto, ela deve acessar os valores das pro­pri­e­da­des firstName e lastName, que foram definidas e ini­ci­a­li­za­das no cons­tru­tor da classe. O objeto person, criado com a palavra-chave new, é seguido do nome da classe e dos pa­râ­me­tros ne­ces­sá­rios. Por fim, o método concatena as duas strings quando chamado, e retorna o nome completo, também como string. Nesse exemplo, o resultado para o objeto person será “John Doe”.

Exemplos de aplicação de classes em Ty­peS­cript

Em Ty­peS­cript, classes oferecem diversos me­ca­nis­mos para organizar e controlar a estrutura e o com­por­ta­mento de objetos em códigos. A seguir, apre­sen­ta­re­mos alguns conceitos que podem lhe ajudar a começar a usar classes em Ty­peS­cript.

Vi­si­bi­li­dade

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

  • public (padrão): Pro­pri­e­da­des e métodos clas­si­fi­ca­dos como public podem ser acessados de qualquer lugar, tanto de dentro quanto de fora de uma classe.
  • private: Tratam-se de pro­pri­e­da­des e métodos que só podem ser acessados dentro da própria classe — eles não são aces­sí­veis a partir de trechos de código externos.
  • protected: Pro­pri­e­da­des e métodos marcados como protected podem ser acessados pela classe em si e por classes derivadas (herança), mas não a partir de trechos de código externos.

Os três mo­di­fi­ca­do­res asseguram o controle, o en­cap­su­la­mento e a segurança das pro­pri­e­da­des e dos métodos em Ty­peS­cript, ga­ran­tindo uma estrutura robusta e modular para as apli­ca­ções.

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 de código acima, socialSecurityNumber é uma pro­pri­e­dade privada que só pode ser acessada dentro da classe Person. O método greet, por sua vez, pode ser acessado de fora da classe.

Herança

Herança é um conceito fun­da­men­tal da pro­gra­ma­ção orientada a objetos (OOP), tanto do Ty­peS­cript quanto de outras lin­gua­gens de pro­gra­ma­ção web. Ela permite a criação de novas classes baseadas em uma su­per­classe (classe base) já existente. A subclasse (classe derivada) herda as pro­pri­e­da­des e os métodos da classe base, sendo capaz de estender ou modificar elementos.

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 exemplo, a classe Dog herda a su­per­classe Animal pelo uso da palavra-chave extends. A classe derivada Dog substitui o método makeSound para adicionar um com­por­ta­mento es­pe­cí­fico, ao mesmo tempo em que herda a pro­pri­e­dade name da classe Animal.

Readonly

Ao fazer uso da palavra-chave readonly, você poderá declarar pro­pri­e­da­des de classes em Ty­peS­cript, assim como clas­si­fi­car objetos como somente leitura. Após a ini­ci­a­li­za­ção de uma pro­pri­e­dade como somente leitura, seu valor não pode mais ser alterado.

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

No código acima, a pro­pri­e­dade pi é declarada como somente leitura e ini­ci­a­li­zada no cons­tru­tor. Após a ini­ci­a­li­za­ção, o valor de pi não pode ser alterado. Se houver uma tentativa de modificar o valor de pi após a ini­ci­a­li­za­ção, o Ty­peS­cript exibirá um erro de com­pi­la­ção.

Ir para o menu principal