Omit<T, K>
Última atualização: 2026-10-22
Omit<T, K> Omit
Omit<T, K> descarta de T as propriedades nomeadas por K e mantém o restante como um novo tipo. Usos típicos: sanitização (remover passwordHash) ou transformar uma linha de banco de dados em resposta de API. É o espelho de Pick — quando basta descartar poucos campos, o Omit leva vantagem.
| 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 Omit<T, K extends string | number | symbol> =
Pick<T, Exclude<keyof T, K>>;
// Uso
type PublicAccount = Omit<Account, "passwordHash" | "twoFA">;
⚙️ Parâmetros
| T | O tipo de objeto de origem de onde as propriedades são descartadas |
|---|---|
| K | A união de chaves a descartar; note que K não precisa ser uma chave de T — uma chave mal escrita é silenciosamente ignorada |
Retorno:Um novo tipo contendo todas as propriedades de T exceto as nomeadas por K, com tipos idênticos.
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
{"username":"carol","email":"carol@example.com"}
(Saída de execução após a transpilação; a implementação remove os campos sensíveis via desestruturação com rest, e PublicAccount deixa de ter passwordHash no nível de tipo — um erro de digitação como Omit<Account, "passwordHash2"> manteria o campo sensível)
💡 Observações
ℹ️ Info A implementação é uma combinação: Omit<T, K> = Pick<T, Exclude<keyof T, K>> — primeiro Exclude remove K da união de chaves, depois Pick mantém o restante.
⚠️ Atenção K não é validado contra as chaves de T: Omit<Account, "passwordHashh"> (uma letra a mais) compila e mantém o campo sensível. Para sanitização sensível à segurança, prefira uma variante estrita: type StrictOmit<T, K extends keyof T> = Omit<T, K>.
💡 Dica Omit é uma lista negra: campos adicionados a Account depois aparecem automaticamente no resultado de Omit. É exatamente por isso que ele serve a cenários do tipo "expôr tudo, esconder poucos".
🏷️ Tipos Utilitários Relacionados
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P Qual escolher afinal: Omit ou Pick?
R Vá pela intenção: "preciso exatamente destes" → Pick (lista branca, mais claro para poucos campos); "descartar estes" → Omit (lista negra, campos futuros da origem fluem automaticamente). Para sanitização sensível à segurança, Pick é mais seguro (chaves desconhecidas geram erro).
P Por que Omit não valida as chaves como Pick faz?
R A restrição oficial K extends string | number | symbol é deliberadamente frouxa para permitir omitir de formas não totalmente conhecidas. A frouxidão corta dos dois lados: flexível, mas um erro de digitação falha em silêncio. Um StrictOmit de uma linha restaura o rigor.
P Como remover uma propriedade de verdade em tempo de execução?
R Omit muda apenas tipos. Em tempo de execução, use desestruturação com rest: const { passwordHash, ...rest } = account; ou delete account.passwordHash (erro de compilação em propriedades obrigatórias no TS estrito). A desestruturação com rest é a abordagem recomendada.