T = Default Padrões de parâmetros genéricos
Última atualização: 2026-10-22
T = Default Padrões de parâmetros genéricos
Parâmetros de tipo podem ter padrões (<T = string>): omitido significa que o padrão vale, especificado significa que a sua escolha vence. Mesma ideia dos parâmetros padrão de função — configuração zero para casos comuns, sobrescrita para os especiais — tornando APIs genéricas mais amigáveis.
| 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 Paginated<T = string, Page = number> {
page: Page;
items: T[];
}
const names: Paginated = { page: 1, items: ["ann", "bob"] }; // usa os padrões
const orders: Paginated<{ id: number; total: number }> = { page: 2, items: [] }; // sobrescreve T
⚙️ Parâmetros
| T = string | Um parâmetro de tipo com padrão: pode ser totalmente omitido no ponto de uso |
|---|---|
| Page = number | O segundo parâmetro também tem padrão: sobrescrever Page exige escrever T antes (preenchimento posicional) |
Retorno:Os padrões só decidem qual tipo vale quando omitido; um tipo instanciado se comporta de forma idêntica a um explicitamente especificado.
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
ann,bob 2 7
(Saída de execução após a transpilação; pôr uma string em orders.items gera um erro de compilação — T foi sobrescrito para o objeto de pedido)
💡 Observações
ℹ️ Info Um padrão pode ser qualquer expressão de tipo: um tipo concreto (string), outro parâmetro (T = Page[]), até um tipo condicional — padrões são computação plena no nível de tipos.
⚠️ Atenção Os parâmetros preenchem por posição: para sobrescrever o segundo (Page), o primeiro (T) também deve ser escrito (seu padrão ou um placeholder).
💡 Dica Genéricos de bibliotecas quase sempre devem ter padrões (por exemplo, Paginated<T = unknown>): iniciantes começam sem entender o parâmetro, e usuários avançados especificam com precisão.
🏷️ Genéricos Relacionados
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P Há regras para padrões com restrições?
R O padrão deve satisfazer a restrição: <T extends HasId = User> é legal (User se encaixa em HasId), <T extends HasId = string> dá erro. Padrões são tipos de fallback; restrições são o portão.
P Quando o padrão de uma classe genérica entra em ação?
R Para new Stack() sem argumentos e sem nada a inferir: class Stack<T = string> dá Stack<string>. Argumentos do construtor têm precedência sobre o padrão via inferência.
P Um padrão pode referenciar parâmetros de tipo anteriores?
R Sim: interface Pair<K = string, V = K[]> — V tem como padrão um array de K. As referências apontam apenas para frente, a parâmetros já declarados.