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.
| Grupo | Tipos Utilitários |
|---|---|
| Tipo | Tipo |
| 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
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
// Uso
type OrderSummary = Pick<Order, "id" | "buyer" | "total">;
⚙️ Parâmetros
| T | O tipo de objeto de origem de onde as propriedades são selecionadas |
|---|---|
| K extends keyof T | A 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.
🏷️ Tipos Utilitários Relacionados
💡 Casos relacionados
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.