Aula 04 - Interfaces e Modelagem de Domínio 🏗️
O que são Interfaces? 🧩
- Contratos para o seu código.
- Definem a "forma" de um objeto.
Diferença: Interface vs Type ⚖️
- Interface: Focada em objetos e extensibilidade (POO).
- Type: Mais flexível (Unions, Primitivos, Interseções).
Sintaxe Básica ✍️
interface Usuario {
nome: string;
email: string;
}
Propriedades Opcionais ❓
- Use
? para campos que podem não existir.
interface Produto {
nome: string;
preco: number;
descricao?: string;
}
Propriedades Readonly 🔒
- Proteção contra alterações após a criação.
interface Config {
readonly apiKey: string;
}
Extensibilidade (Herança) 🌲
- Interfaces podem herdar de outras.
interface Animal { nome: string; }
interface Gato extends Animal { miau: boolean; }
Herança Múltipla 🌳
- Sim, uma interface pode estender várias!
interface Humano extends Pessoa, Trabalhador {}
Implementação em Classes 🏛️
- O contrato que a classe deve seguir.
class MeuBotao implements BotaoInterface {
// Deve ter os métodos da interface
}
Declaration Merging 🤝
- Interfaces com o mesmo nome na mesma pasta se fundem automaticamente.
Quando usar Merging? 🛠️
- Ideal para estender definições de bibliotecas externas (como adicionar um campo no
Request do Express).
Modelagem de Domínio 🗺️
- Traduzindo a realidade em interfaces.
- Cliente, Produto, Pedido, Pagamento.
Exemplo: Pedido de Ecommerce 🛒
classDiagram
Pedido --> Cliente
Pedido --> "many" ItemPedido
ItemPedido --> Produto
class Produto{ +id, +nome, +preco }
Interfaces para Funções 📞
- Sim, interfaces podem descrever a assinatura de uma função.
interface Calculadora {
(a: number, b: number): number;
}
Boas Práticas de Nomeação ✍️
- Use nomes substantivos (Usuario, Produto).
- A convenção do prefixo
I (ex: IUsuario) é opcional, mas herdada do C#.
Interface vs Model 🏗️
- No TS, usamos interfaces para definir a estrutura dos dados que trafegam na nossa aplicação.
Segurança de Tipo Total 🛡️
- Com interfaces bem definidas, erros de "undefined" somem do seu projeto.
Resumo 🏁
- Definição de Interfaces
- Extensão (extends)
- Interface vs Type Alias
Próxima Aula: Classes e POO!
Vamos entrar no mundo dos objetos. 🚀
Perguntas? ❓