function <T> Funções genéricas

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

function <T> Funções genéricas

Funções genéricas usam um parâmetro de tipo <T> para transformar "tipos" em argumentos: uma única lógica serve para muitos tipos, com tipos de entrada e saída ligados. Mais seguro que any (a informação de tipo é preservada) e mais barato que copiar e colar versões por tipo.

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

function identity<T>(value: T): T {
  return value;
}

// Múltiplos parâmetros de tipo + restrições
function pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;

⚙️ Parâmetros

<T>Inferido dos argumentos ou dado explicitamente; convenções: T/U/V para tipos gerais, K para chaves, E para elementos
K extends keyof TRestrição: K deve ser uma chave de T; chaves inválidas são erros de compilação

Retorno:Expresso por parâmetros de tipo — o retorno pode compartilhar o tipo do argumento (T) ou ser derivado (Pick<T, K>).

▶ Exemplo

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

Saída:

{"id":1,"name":"Charlie"}

(Saída de execução após a transpilação; passar "age" para keys é um erro de tipo — K está restrito por keyof T)

💡 Observações

ℹ️ Info Genéricos são totalmente apagados após a transpilação — não existe T em execução, apenas uma função comum; toda a ligação de tipos acontece em tempo de compilação.
💡 Dica Prefira expressar tipos de retorno via parâmetros de tipo (por exemplo, Pick<T, K>) em vez de um tipo amplo escrito à mão — quem chama recebe o tipo preciso e ligado.
⚠️ Atenção Mais genéricos não é melhor: se um único tipo basta, adicionar T só atrapalha a leitura; escreva primeiro a versão concreta e generalize quando a duplicação aparecer.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Genéricos vs any — qual a diferença?
R any apaga a informação de tipo (argumento e retorno ficam desconectados, sem mais verificações); genéricos mantêm a ligação (identity(42) retorna number). Genéricos são a alternativa segura ao any.
P Quando uma função deve ser genérica?
R Quando os tipos de argumento e de retorno estão ligados, ou uma única lógica precisa servir a muitos tipos. Sinais: você está prestes a escrever any, ou a copiar e colar a mesma função para tipos diferentes.
P Como ler <T, K extends keyof T>?
R Dois parâmetros de tipo: T é qualquer tipo; K deve ser uma das chaves de T (restrito por keyof T). Em pick(user, ["id"]): T = typeof user, K = "id", e o tipo de retorno é { id: number }.
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%