Carregando
Todos os artigos
Programação 2 min de leitura

Herança de Classes no TypeScript

nbkhope

A palavra-chave class, introduzida no ECMAScript 2015, nos permite definir uma classe em JavaScript. O TypeScript também tem suporte ao paradigma. Um dos elementos da programação orientada à objetos é a herança de classes para reutilizar o código. No JavaScript tradicional, a herança é feita através de protótipos. Já com a palavra-chave class, podemos fazer a herança através da palavra-chave extends.

Vamos supor que temos uma base classe chamada Individuo. Vamos simplificar o nosso exemplo e considerar mais duas classes: um individuo poderia ser um estudante ou um funcionário de uma empresa. Por causa disso, podemos usar herança e definir que:

Um Estudante é um Individuo
Um Funcionario é um Individuo

Então a base classe é Individuo e as classes derivadas são Estudante e Funcionario. O primeiro é também chamado de superclasse e os segundos são subclasses.

Vamos aprender com um código. Primeiro definimos a base classe:

1class Individuo {
2  nome: string;
3  constructor(oNome: string) {
4    this.nome = oNome;
5  }
6}

Agora, para herdarmos da base classe, usamos a palavra-chave extends logo após o nome dela. Depois segue com o nome da classe derivada:

1class Estudante extends Individuo {
2}
3
4class Funcionario extends Individuo {
5}

Não definimos nenhum membro para as classes derivadas, mas ambas irão herdar a propriedade nome e o constructor de Individuo.

Podemos então adicionar propriedades e métodos específicos para cada subclasse. Por exemplo, um Estudante tem uma disciplina de estudo e um funcionário tem um salario.

1class Estudante extends Individuo {
2  disciplina: string;
3
4  constructor(oNome: string, aDisciplina: string) {
5    super(oNome);
6    this.disciplina = aDisciplina;
7  }
8}
9
10class Funcionario extends Individuo {
11  salario: number;
12
13  constructor(oNome: string, oSalario: number) {
14    super(oNome);
15    this.salario = oSalario;
16  }
17}

No exemplo acima, precisamos adicionar um novo constructor à cada classe derivada para poder iniciar as propriedades específicas de cada classe. Note que podemos reutilizar o código do constructor da base classe Individuo com a chamada de super.

É importante ressaltar que super deve ser chamado para iniciar os valores compartilhados através da base classe e que não se deve referenciar this. no corpo do constructor antes da chamada de super().

Vamos testar nossas classes:

let fJoao: Funcionario = new Funcionario("Joao", 123);
let eAna: Estudante = new Estudante("Ana", "Arquitetura");

Note que também podemos criar uma variável do tipo da base classe e ainda armazenar tanto um Estudante como um Funcionario:

let individuo: Individuo = fJoao;
individuo = eAna;

O código acima funciona porque um Funcionario é um Individuo e um Estudante também é um Individuo.

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

https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb

Nos vemos lá!

Obrigado pela leitura!

Conhece alguém que vai gostar? Mande para essa pessoa.

Mais artigos

Leia a seguir

Programação 5 min de leitura

Como Tratar Erros em Go: Um Guia Prático

Aprenda a tratar erros em Go com exemplos executáveis: retorne um erro, confira o resultado, acrescente contexto com %w e reconheça um arquivo ausente com errors.Is.

nbkhope

Comentários

Seja gentil e específico. Comentários com links de contas novas aparecem depois da análise de um moderador.