Interfaces (TypeScript)
As interfaces no TypeScript são contratos que definem a estrutura de um objeto. No nosso projeto, elas são a escolha principal para definir modelos de dados, props de componentes e contratos que precisam ser estendidos.
1. Quando usar Interfaces?
Você deve usar interface sempre que estiver definindo a forma de um objeto que pode ser estendido ou que representa um contrato fixo no sistema.
A. Props de Componentes
Interfaces são excelentes para props porque permitem que outros desenvolvedores estendam o componente facilmente.
interface ButtonProps {
label: string;
onClick: () => void;
}
// Extensão simples
interface IconButtonProps extends ButtonProps {
icon: string;
}B. Entidades de Domínio e Modelos
Para definir como um usuário ou um paciente se parece no sistema.
interface User {
id: string;
name: string;
email: string;
}C. Declaration Merging
Uma característica única das interfaces é que se você declarar duas interfaces com o mesmo nome, o TS as unifica. Isso é útil para estender bibliotecas externas ou tipos globais.
2. Quando NÃO usar Interfaces?
- Para Tipos Primitivos: Você não pode usar interface para dar nome a um tipo simples (ex:
string). - Uniões (Unions): Se você precisa que um tipo seja "A ou B", você deve usar
type. - Tuplas: Interfaces não lidam bem com estruturas de array fixo.
3. Como fazer vs Como não fazer
✅ Como fazer
- Use interfaces para definir objetos complexos e props.
- Aproveite o
extendspara criar hierarquias de tipos claras. - Mantenha os nomes das interfaces em PascalCase (ex:
UserSession).
interface BaseResponse {
success: boolean;
message: string;
}
interface UserResponse extends BaseResponse {
data: User;
}❌ Como não fazer
- NÃO use interface como um simples alias de tipo. Se o que você está definindo não é um objeto ou contrato extensível, use
type. - NÃO use prefixos como
IUser. O TypeScript recomenda apenas o nome direto (User). - NÃO force uma interface a aceitar múltiplos tipos de retorno via uniões complexas; isso é papel do
type.
// ❌ EVITE: Usar interface para algo que deveria ser um type alias
interface UserId extends string {} // Errado e confuso
// ❌ EVITE: Prefixo 'I'
interface IButtonProps {} // Padrão antigo e desencorajadoPor que isso importa?
Usar interfaces corretamente garante que o compilador do TypeScript consiga otimizar as verificações de tipo e facilita a vida de quem está consumindo seu código, permitindo extensibilidade sem hacks.