Médio TypeScript
Estendendo interfaces com extends
Enunciado
Crie uma interface Funcionario que estende Pessoa (com nome e idade) adicionando cargo (string) e salario (number). Instancie um funcionário e imprima Nome: João, Cargo: Dev, Salário: 5000.
Requisitos
- A interface
Pessoadeve ternomeeidade. - A interface
Funcionariodeve estenderPessoae adicionarcargoesalario. - A saída deve ser exatamente
Nome: João, Cargo: Dev, Salário: 5000.
Código inicial
// Defina a interface Pessoa
// Defina a interface Funcionario com extends
// Crie o objeto e imprima
Saída esperada
Nome: João, Cargo: Dev, Salário: 5000
Ver dica
Use interface Funcionario extends Pessoa { ... } e depois crie o objeto com todas as propriedades.
Mostrar solução
// Interface base
interface Pessoa {
nome: string;
idade: number;
}
// Interface que herda de Pessoa
interface Funcionario extends Pessoa {
cargo: string;
salario: number;
}
// Objeto que implementa Funcionario
const func: Funcionario = {
nome: "João",
idade: 28,
cargo: "Dev",
salario: 5000,
};
console.log(`Nome: ${func.nome}, Cargo: ${func.cargo}, Salário: ${func.salario}`);
Passo a passo
- Declaramos
Pessoacom as propriedades básicasnomeeidade. - Criamos
Funcionariousandoextends Pessoa, herdandonomeeidadee adicionandocargoesalario. - O objeto
funcé tipado comoFuncionarioe precisa conter todas as quatro propriedades. - Imprimimos apenas as propriedades desejadas usando template string.
Por que funciona
extends copia os membros da interface base para a derivada. Assim, Funcionario exige tanto os campos herdados quanto os novos. O TypeScript verifica se o objeto satisfaz todos os requisitos.
Erros comuns
- Esquecer de incluir
idadeno objeto: erro de propriedade faltante. - Usar
implementsem vez deextendsna interface:implementsé para classes. - Tentar estender múltiplas interfaces com vírgula:
interface A extends B, Cé válido, mas se B e C tiverem membros conflitantes, dá erro.
Outra forma de resolver
Usar interseção de tipos:
type Funcionario = Pessoa & { cargo: string; salario: number };
Útil quando você quer combinar tipos sem herança nominal.
Saída esperada
Nome: João, Cargo: Dev, Salário: 5000