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.
| 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
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 T | Restriçã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.
🏷️ Genéricos Relacionados
💡 Casos relacionados
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 }.