Interfaces
Interfaces em TypeScript são contratos que definem a estrutura de objetos, especificando propriedades e métodos que devem estar presentes. Elas ajudam a garantir a consistência e segurança de tipos em variáveis, parâmetros e retornos de funções, favorecendo a organização do código.
Declaração de Interfaces
Uma interface é criada com a palavra-chave interface. Ela pode incluir tipos primitivos, arrays, funções e propriedades opcionais.
interface Pessoa {
nome: string;
idade: number;
apresentar(): void;
}
Qualquer objeto ou classe que implementa Pessoa deve respeitar esta estrutura.
Utilizando Interfaces com Objetos
Objetos que sigam a “assinatura” são considerados compatíveis com a interface:
const autor: Pessoa = {
nome: "Carlos",
idade: 33,
apresentar() {
console.log(`Meu nome é ${this.nome}`);
}
};
autor.apresentar();
Qualquer objeto que defina nome, idade e o método apresentar será aceito como Pessoa.
Implementando Interfaces em Classes
Classes podem implementar interfaces, obrigando a definição das propriedades e métodos requisitados:
class Aluno implements Pessoa {
nome: string;
idade: number;
constructor(nome: string, idade: number) {
this.nome = nome;
this.idade = idade;
}
apresentar() {
console.log(`Sou o aluno ${this.nome}`);
}
}
A classe Aluno precisa fornecer todas as definições de Pessoa, caso contrário, o compilador mostrará erro.
Propriedades e Métodos Opcionais
O sinal de interrogação (?) indica propriedades ou métodos que podem ser omitidos:
interface Livro {
titulo: string;
autor?: string;
resumo?(): void;
}
const livro1: Livro = { titulo: "1984" };
Neste exemplo, autor e resumo são opcionais.
Interfaces com Funções e Tipos de Objetos
Interfaces também podem descrever funções:
interface Operacao {
(a: number, b: number): number;
}
const soma: Operacao = (x, y) => x + y;
Este padrão define o formato que uma função precisa seguir para ser considerada do tipo Operacao.
Extensão de Interfaces
Uma interface pode estender outra, herdando características:
interface Pessoa {
nome: string;
}
interface Funcionário extends Pessoa {
cargo: string;
}
const gerente: Funcionário = { nome: "Ana", cargo: "Gestora" };
Funcionário traz todas as propriedades de Pessoa além das suas próprias.
Interfaces Genéricas
Interfaces podem ser genéricas, aceitando tipos como parâmetros:
interface Par<T, U> {
primeiro: T;
segundo: U;
}
const exemplo: Par<string, number> = { primeiro: "id", segundo: 15 };
Isso permite muito mais flexibilidade na definição de tipos.
Resumo
- Interfaces criam contratos de tipos para objetos, funções e classes.
- Permitem herança e uso de propriedades/métodos opcionais.
- Facilitam a manutenção, reutilização e clareza do código, sendo parte central do suporte a tipagem estática no TypeScript.
