interface<T> Interfaces genéricas

Última atualização: 2026-10-22

interface<T> Interfaces genéricas

Uma interface genérica recebe parâmetros de tipo (interface ApiResult<T>), desacoplando a forma do contêiner do seu conteúdo: ApiResult<UserBrief> e ApiResult<number[]> compartilham uma mesma estrutura com payloads diferentes. Interfaces, respostas de API e tipos de armazenamento se reutilizam por meio dela.

GrupoGenéricos
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 ApiResult<T> {
  code: number;
  data: T;
}

// Múltiplos parâmetros de tipo e padrões são suportados
interface Paginated<T, Page = number> {
  page: Page;
  items: T[];
}

⚙️ Parâmetros

<T>Parâmetro de tipo: preenchido com um tipo concreto no uso (ApiResult<UserBrief>), ou inferido do contexto
data: TO campo de payload se liga a T: res1.data é automaticamente UserBrief, verificado na leitura e na escrita

Retorno:Interfaces genéricas são um conceito no nível de tipos, sem código em execução; o tipo instanciado determina os tipos de leitura/escrita dos campos.

▶ Exemplo

Edite o código abaixo e clique em Testar para ver o resultado transpilado:

Saída:

Ada admin 20

(Saída de execução após a transpilação; pôr um número em res1.data ou acessar res2.data.name gera um erro de compilação — T está fixado)

💡 Observações

ℹ️ Info Os parâmetros de tipo devem ser fornecidos ao usar uma interface genérica (a menos que tenha padrão): um ApiResult solto está não instanciado e não pode servir como tipo de variável.
💡 Dica Componha para aninhar: ApiResult<Paginated<Order>> se camada de forma limpa, mais claro que achatar manualmente code/data/page/items num único tipo.
⚠️ Atenção Não generalize pela generalização: se a interface é usada uma vez com tipo fixo, um tipo concreto é mais claro. Genéricos compensam quando uma forma serve a muitos payloads.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Interface genérica ou alias de type genérico?
R Quase equivalentes em poder. interface para declaration merging, hierarquias com extends e implements de classes; type para uniões, composição mapeada e condicional.
P Método genérico vs interface genérica?
R Em interface Box<T> { open(): T }, T é compartilhado pela interface inteira (um Box<string> tem um único T em todo lugar); em interface Maker { make<T>(): T }, T é fixado a cada chamada. Contêiner vs ação.
P Uma interface genérica pode restringir seu parâmetro de tipo?
R Sim, mesma sintaxe das funções: interface KeyedStore<T extends { id: string }> { get(id: string): T | undefined } — tipos fora da restrição dão erro no ponto de uso.
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%