interface Interface (extensão e declaration merging)
Última atualização: 2026-10-22
interface Interface (extensão e declaration merging)
Uma interface dá um nome à forma de um objeto: declara quais propriedades e métodos existem e seus tipos. Interfaces existem apenas em tempo de compilação (totalmente apagadas após a transpilação) e suportam extends e declaration merging — a contraparte dos type aliases.
| Grupo | Composição de Tipos |
|---|---|
| Tipo | Sintaxe |
| Modo strict | Não necessário |
ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.
📝 Sintaxe
interface Animal {
name: string;
speak(): void;
}
// Herança
interface Pet extends Animal {
owner: string;
}
// Mesclagem de declarações: interfaces com o mesmo nome mesclam os membros automaticamente
interface Window { title: string }
interface Window { version: number }
⚙️ Parâmetros
| extends | Estende uma ou mais interfaces para herdar todos os seus membros |
|---|---|
| ?: | Marcador de propriedade opcional; a propriedade pode estar ausente |
| readonly | Modificador readonly; a propriedade não pode ser reatribuída |
Retorno:Nenhum valor de retorno — interface é um conceito puramente de tipos e não produz código em tempo de execução.
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
Tom Jerry
Meow
(Saída de execução após a transpilação; a verificação de tipos é feita pelo tsc — mudar name para número produz error TS2322)
💡 Observações
ℹ️ Info Interfaces são totalmente apagadas após a transpilação — custo zero em runtime; são um contrato estrutural que só o compilador lê.
💡 Dica Interfaces com o mesmo nome se mesclam automaticamente (declaration merging) — a forma padrão de estender tipos de terceiros (ex.: adicionar campos a window).
⚠️ Atenção interface e type aliases são intercambiáveis na maioria dos casos; use type para uniões/tipos mapeados/condicionais e interface quando precisar de declaration merging (as lições 9/11 têm a comparação completa).
🏷️ Composição de Tipos Relacionada
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P Como interface difere de type?
R Ambos definem formas de objetos e são intercambiáveis no dia a dia. interface suporta extends e declaration merging; type pode expressar uniões, tuplas e tipos mapeados e condicionais. Escolha um por convenção de equipe e misture com parcimônia.
P interface pode descrever funções, arrays ou classes?
R Sim: call signatures ((x: number) => string) descrevem funções, index signatures ([i: number]: T) descrevem arrays, construct signatures descrevem construtores, e classes implementam interfaces com implements.
P O que é declaration merging e quando é útil?
R Membros de duas interfaces com o mesmo nome se mesclam em uma. Uso típico: adicionar campos personalizados a tipos de bibliotecas como window ou Request sem mexer no código-fonte da biblioteca.