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.

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 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 = stringUm parâmetro de tipo com padrão: pode ser totalmente omitido no ponto de uso
Page = numberO 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.
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.
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%