Type vs Interface no TypeScript
Type e interface no TypeScript: união, merge e quando cada um encaixa no dia a dia.
Por que isso é importante
Type vs interface no TypeScript: interface mergeia declaração; type brilha em união e mapped types. Não são iguais — escolha pelo caso, não por dogma.
O Que São Type e Interface no TypeScript
Galera, vamos direto ao ponto. Tanto type quanto interface servem pra definir o formato de dados no TypeScript. Parecem gêmeos, mas têm personalidades bem diferentes.
Interface nasceu pra descrever a forma de objetos. Pensa nela como um contrato: 'esse objeto precisa ter esses campos'. Type alias é mais versátil. Dá pra representar objetos, unions, intersections, primitivos, tuplas e muito mais.
Na prática, a grande sacada é: interface é aberta (pode ser estendida depois) e type é fechado (uma vez definido, não muda). Isso muda completamente como você organiza código em projetos grandes.
O TypeScript trata os dois de forma parecida na compilação, mas cada um tem superpoderes próprios. Entender onde cada um brilha é o que separa o dev que chuta do dev que decide com confiança.
Como Decidir entre Type e Interface Passo a Passo
Não precisa decorar regra. Segue esse fluxo e você acerta em 95% dos casos:
interface. Ela foi feita pra isso e tem syntax mais limpa.type. Interface não faz union.interface com declaration merging resolve.type é mais natural aqui.type dá conta.interface pra objetos e type pro resto. Simples assim.Exemplos Práticos
Vamos ver código de verdade. Primeiro, a syntax básica de cada um:
// Interface - descreve objetos
interface User {
name: string;
age: number;
email: string;
}
// Type alias - descreve qualquer tipo
type UserType = {
name: string;
age: number;
email: string;
};
// Até aqui, fazem a mesma coisa
const user1: User = { name: "Ana", age: 28, email: "ana@dev.com" };
const user2: UserType = { name: "Ana", age: 28, email: "ana@dev.com" };
Agora, onde interface brilha: extending e declaration merging.
// Extending com interface (extends)
interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
// Declaration merging - só interface faz isso
interface Config {
apiUrl: string;
}
interface Config {
timeout: number;
}
// Config agora tem apiUrl E timeout
const config: Config = { apiUrl: "https://api.com", timeout: 5000 };
E onde type manda: unions, intersections, tuplas e tipos complexos.
// Union types - só type faz
type Status = "loading" | "success" | "error";
type ID = string | number;
// Intersection com type (&)
type Admin = User & { role: "admin" };
// Tupla - só type
type Coordinate = [number, number];
// Mapped types - só type
type ReadonlyUser = {
readonly [K in keyof User]: User[K];
};
// Conditional types - só type
type IsString = T extends string ? "sim" : "nao";
Resumo rápido: interface pra objetos e contratos. Type pra todo o resto. Em projetos reais, você vai usar os dois juntos sem problema.
Erros Comuns
Cuidado com esses deslizes
Erro 1: Usar interface pra union types. Interface NÃO suporta union. Se você precisa de 'string | number', vai de type.
Erro 2: Abusar de declaration merging sem querer. Se você definir a mesma interface duas vezes no mesmo escopo, o TypeScript junta as duas automaticamente. Isso pode criar campos fantasma que você nem sabe que existem.
Erro 3: Achar que type é sempre melhor por ser mais flexível. Em projetos com muitas bibliotecas, interface facilita a extensão de tipos de terceiros via declaration merging.
Erro 4: Misturar extends com & sem critério. Interface usa extends, type usa &. Combinar os dois funciona, mas fica confuso pra quem lê o código depois.
Erro 5: Ignorar performance. Em projetos muito grandes, interface tende a performar melhor na checagem de tipos porque o compilador cacheia interfaces de forma mais eficiente.
Checklist: Type vs Interface
Domine TypeScript na prática
Saber a diferença entre type e interface é só o começo. No CrazyStack, você usa TypeScript em um projeto real completo: API em Node.js, frontend em React, autenticação, pagamentos, deploy. Tudo tipado do zero.
Chega de ficar só na teoria. Você termina o curso com um SaaS pronto pra colocar no ar e começar a faturar. É o projeto que todo dev queria ter no portfólio.
Continue lendo
Como Usar Interface no TypeScript
A criar e usar interfaces no TypeScript do zero.
Como Usar Type no TypeScript
Domine type aliases no TypeScript com exemplos diretos.
Como Usar Union Types no TypeScript
Entenda union types e como combinar tipos no TypeScript.
Generics no TypeScript
Tipos reutilizáveis