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.
| Grupo | Genéricos |
|---|---|
| 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 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: T | O 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.
🏷️ Genéricos Relacionados
💡 Casos relacionados
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.