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.

GrupoComposição de Tipos
TipoSintaxe
Modo strictNã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

extendsEstende uma ou mais interfaces para herdar todos os seus membros
?:Marcador de propriedade opcional; a propriedade pode estar ausente
readonlyModificador 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).
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.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%