Partial<T> Partial (com Required)
Última atualização: 2026-10-22
Partial<T> Partial (com Required)
Partial<T> torna todas as propriedades de T opcionais: perfeito para "atualizações parciais" (rascunhos de formulários, endpoints de patch) — sem necessidade de escrever à mão um novo tipo só para alterar dois campos. É o espelho de Required<T>.
| 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 Partial<T> = {
[K in keyof T]?: T[K];
};
// Uso
function applyPatch(user: UserProfile, patch: Partial<UserProfile>): UserProfile;
⚙️ Parâmetros
| T | O tipo de objeto a transformar; cada propriedade K e seu tipo T[K] são percorridos pelo tipo mapeado |
|---|
Retorno:Um novo tipo com as mesmas propriedades de T, mas todas opcionais (?).
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
{"id":1,"name":"Diana","email":"d@example.com","age":22}
(Saída de execução após a transpilação; o patch passa apenas age, os demais campos mantêm seus valores)
💡 Observações
ℹ️ Info A implementação é um tipo mapeado: [K in keyof T]?: T[K] — percorre cada chave de T e adiciona o marcador ? (a lição 19, "implementação de tipos utilitários", deriva isso por completo).
⚠️ Atenção Partial é raso: os tipos das propriedades aninhadas não se tornam opcionais recursivamente; para opcionalidade profunda, escreva o seu próprio DeepPartial (tipo mapeado recursivo).
💡 Dica Partial é o espelho de Required (adicionar vs remover ?); combine com Pick/Omit para tipos de patch precisos que só permitem alterar campos específicos.
🏷️ Tipos Utilitários Relacionados
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P Qual é a diferença entre Partial e escrever ? à mão em cada propriedade?
R O efeito é o mesmo, mas Partial acompanha o tipo de origem automaticamente: adicione um campo a UserProfile e Partial<UserProfile> o incorpora; uma cópia escrita à mão diverge silenciosamente.
P As propriedades aninhadas também se tornam opcionais?
R Não. Partial é raso — apenas as propriedades do primeiro nível recebem ?; address: {city: string} como um todo se torna opcional, mas city permanece obrigatório. Escreva DeepPartial para necessidades profundas.
P Depois de Partial, posso atribuir undefined a campos obrigatórios?
R Omitir campos sempre é permitido; atribuir undefined explicitamente depende de strictNullChecks: no modo estrito, os campos de Partial são T[K] | undefined. Mantenha o modo estrito ativo.