infer A palavra-chave infer

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

infer A palavra-chave infer

infer captura um tipo dentro do ramo verdadeiro de um condicional: T extends Array<infer U> ? U : never significa "se T é um array, extraia o tipo dos seus elementos como U". Ela eleva o casamento de "casar e descartar" para "casar e extrair" — o cerne de utilitários como ReturnType.

GrupoGenéricos
TipoOperador
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

type ItemOf<T> = T extends Array<infer U> ? U : never;

type A = ItemOf<string[]>;   // string
type B = ItemOf<number[]>;   // number

// infer pode aparecer em qualquer posição do padrão
type FirstArg<T> = T extends (first: infer A, ...rest: any[]) => any ? A : never;

⚙️ Parâmetros

infer UUma declaração de placeholder: durante o casamento do extends, o tipo naquela posição é capturado como U
T extends X ? U : YVálido apenas dentro do ramo verdadeiro do condicional atual; invisível fora dele

Retorno:infer não é um tipo, mas uma ligação feita durante o casamento; o resultado do condicional é calculado a partir do que foi capturado.

▶ Exemplo

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

Saída:

11 A

(Saída de execução após a transpilação; n e s são number e string em tempo de compilação — infer extraiu os tipos dos elementos)

💡 Observações

ℹ️ Info infer pode aparecer em qualquer lugar do padrão do extends: Promise<infer U> agarra o tipo do resolve, [any, infer R] o segundo slot da tupla, (x: infer P) => any o parâmetro — a posição é o significado.
💡 Dica infer de mesmo nome repetido dispara a união de candidatos: [infer T, infer T] casa [number, number] como number, mas falha em [string, number] — uma verificação de consistência natural.
⚠️ Atenção infer só é legal dentro da cláusula extends de um condicional — um type U = infer X solto é um erro de sintaxe, e U não pode ser referenciado no ramo falso.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P infer vs um parâmetro genérico <T>?
R Parâmetros genéricos são dados por quem chama; infer extrai de um tipo existente. Um declara entrada, o outro minera informação — ReturnType<T> infere um retorno de um tipo de função.
P O que acontece com U quando o casamento falha?
R Sem casamento, sem ligação — o fluxo simplesmente cai no ramo falso, que tipicamente produz never ou unknown como fallback.
P Quais utilitários embutidos usam infer?
R ReturnType, Parameters, ConstructorParameters, Awaited e mais — todas combinações de extends + infer; aprenda infer e a maior parte do código-fonte dos utility types se torna legível.
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%