Uma Breve Introdução a Classes no TypeScript

A programação orientada à objetos no JavaScript é originalmente realizada através de funções e herança prototípica. Com o advento do ECMAScript 2015, coloquialmente chamado de “ES6”, foi adicionada a palavra chave class, agora nos permitindo criar classes de maneira similar à linguagens como C++, C#, e Java.

O TypeScript também tem suporte a declaração de classes através da palavra chave class. Vamos ver um exemplo:

class Forma {
  nome: string;

  constructor(oNome: string) {
    this.nome = oNome;
  }
}

O exemplo acima define uma classe chamada de Forma, que tem como atributo a propriedade nome. A função constructor() é chamada quando você construir um objeto baseado na classe e atribui um nome à forma.

O acesso de membros da classe é por padrão public, se nada for definido explicitamente. Entao podemos instanciar um objeto e acessar a propriedade nome diretamente:

let retang: Forma = new Forma("Retangulo");
console.log(`O nome da forma é ${retang.nome}`);

A expressão acima primeiro declara uma variável do tipo Forma e atribui ao seu valor uma nova instância de Forma, com o nome Retangulo. Note que a string Retangulo é passada como argumento para o constructor, que por si atribui o nome do objeto this.nome.

O console.log imprime uma mensagem que inclui acesso ao nome da Forma diretamente, sem passar por um método getter.

Vamos adicionar duas propriedades à classe Forma: largura e altura. Ambas devem ser do tipo number.

class Forma {
  nome: string;
  largura: number;
  altura: number;

  constructor(oNome: string, aLargura: number, aAltura: number) {
    this.nome = oNome;
    this.largura = aLargura;
    this.altura = aAltura;
  }
}

Agora podemos fazer um método para calcular a área da forma:

class Forma {
  // ...
  public obterArea(): number {
    return this.largura * this.altura;
  }
}

Como já mencionado, o acesso dos membros de uma classe em TypeScript é public por padrão, mas o exemplo acima o define explicitamente. Acesso público significa que o membro pode ser referenciado por fora da classe. Isso é o oposto do acesso privado (private), em que é proibido a referência do membro de fora da classe ou instância.

O método não tem nenhum parâmetro porque os valores necessários para calcular a área já são parte dos atributos do objeto.

O tipo do valor de retorno do método obterArea é explicitamente definido como number, mas poderia ser omitido e o compilador deduziria o tipo ao analizar a expressão de retorno.

Vamos testar o método obterArea:

let retang: Forma = new Forma("Retangulo", 3, 4);
console.log(`A area do retângulo é ${retang.obterArea()}`);

Saída:

A area do retângulo é 12

Para não expor os atributos largura e altura do objeto ao mundo de fora, que tal redefinir essas propriedades com acesso privado?

class Forma {
  // ...
  private largura: number;
  private altura: number;
  // ...
}

Dessa maneira, se o usuário do objeto tentar referenciar retang.largura, o compilador irá emitir um erro dizendo que o acesso não é permitido devido a propriedade ser privada:

Property 'largura' is private and only accessible within class 'Forma'.

Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:

Nos vemos lá!

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now