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á!
Leave Uma Breve Introdução a Classes no TypeScript to:
Read more #typescript posts
Best Posts From NBK Mundo Tech
We have not curated any of nbkmundotech's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From NBK Mundo Tech
- Como Usar protected para Acessar Membros Privados de uma Base Classe no TypeScript
- Herança de Classes no TypeScript
- Uma Breve Introdução a Classes no TypeScript
- Como Definir o Tipo de uma Variável que Armazena uma Função no TypeScript
- Como Adicionar o Tipo de Retorno de uma Função em TypeScript
- O Construtor Protegido no TypeScript
- Como Adicionar Anotações de Tipo nos Parâmetros de uma Função em TypeScript
- Como Criar uma Estrutura de Hash Map na Linguagem Golang
- Como Definir Estruturas (Struct) na Linguagem Golang
- Como Definir Ponteiros na Linguagem Golang