Pick<T, K>

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

Pick<T, K> Pick

Pick<T, K> extrai de T as propriedades nomeadas por K para compor um novo tipo. Quando você precisa apenas de uma fatia de um tipo grande (resumos de listas, parâmetros de subconjunto), não há necessidade de duplicar o tipo à mão — e, se os tipos dos campos da origem mudarem, o tipo derivado por Pick acompanha automaticamente.

GrupoTipos Utilitários
TipoTipo
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 Pick<T, K extends keyof T> = {
  [P in K]: T[P];
};

// Uso
type OrderSummary = Pick<Order, "id" | "buyer" | "total">;

⚙️ Parâmetros

TO tipo de objeto de origem de onde as propriedades são selecionadas
K extends keyof TA união de chaves a manter; precisa ser de chaves existentes em T — uma chave mal escrita é um erro de compilação (a rede de segurança do Pick)

Retorno:Um novo tipo contendo apenas as propriedades nomeadas por K, com os mesmos tipos de T.

▶ Exemplo

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

Saída:

{"id":"A-1024","buyer":"Carol","total":259}

(Saída de execução após a transpilação; acessar order.address em um OrderSummary é um erro de compilação — campos fora da lista branca do Pick não existem no tipo)

💡 Observações

ℹ️ Info Implementação: type Pick<T, K extends keyof T> = { [P in K]: T[P] } — K é uma união de chaves e o tipo mapeado puxa cada tipo de propriedade por vez.
⚠️ Atenção Pick é uma lista branca: campos adicionados a Order depois não aparecerão no tipo derivado. Se a sua intenção é "tudo menos alguns", use Omit (lista negra) — caso contrário, campos novos desaparecerão silenciosamente.
💡 Dica Regra prática: poucos campos desejados → Pick; poucos campos a descartar → Omit. Ambos são cópias rasas apenas no nível de tipo — objetos aninhados continuam como referências compartilhadas.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Mutar um objeto derivado por Pick afeta o original?
R Pick seleciona propriedades apenas no nível de tipo; ele não copia dados. O compartilhamento em tempo de execução depende do seu código (o toSummary do exemplo constrói um objeto novo via desestruturação); se você passar a mesma referência de objeto, as mutações naturalmente são visíveis para ambos.
P O que acontece se eu escolher uma chave que não existe?
R Erro de compilação: Type '"oderId"' is not assignable to type 'keyof Order'. K é restringido a keyof T, então erros de digitação aparecem imediatamente — o que torna Pick mais seguro que Omit (que não faz essa verificação).
P O Pick pode incluir métodos também?
R Sim. Métodos são propriedades, então Pick<T, "save"> produz um tipo como { save: () => void } com as mesmas expectativas de vínculo this do original.
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%