Herança de Classes no TypeScript

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 IndividuoEntã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á!
Leia a seguir

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.

O Que É a Linguagem de Programação Rust? Um Guia Simples da Linguagem Rápida Que Não Deixa Você Travar
Um guia simples e sem jargões sobre o Rust, a linguagem tão rápida quanto o C que impede famílias inteiras de erros de memória antes de o programa rodar. Entenda a ideia de posse, por que gigantes da tecnologia o adotam e onde ele é usado.

O Que É a Linguagem de Programação Go? Um Guia Simples da Linguagem da Nuvem
Um guia simples e sem jargões sobre o Go, a linguagem simples e rápida que o Google criou para a nuvem. Entenda o que são goroutines, por que um programa Go é um arquivo só e como o Go passou a mover o Docker, o Kubernetes e boa parte da internet.
Comentários
Seja gentil e específico. Comentários com links de contas novas aparecem depois da análise de um moderador.