Tipos úteis no Typescript: conhecendo o Partial

Alves
3 min readJun 23, 2023

--

Essa é uma série de artigos sobre os “utility types” do typescript, neste artigo nós iremos ver sobre o Partial<T>, veremos exemplos práticos de como utilizá-lo, como ele funciona por baixo dos panos e também algumas dicas extras.

Partial<Type>

O tipo Partial é utilizado para transformar todas as propriedades de um tipo em opcionais, vamos dar uma olhadinha num exemplo:

Neste exemplo, vamos imaginar que temos uma lista de tarefas e precisamos atualizar uma tarefa, a tarefa em questão será desse tipo:

Desta maneira, caso eu queira atualizar uma tarefa, preciso passar todas as propriedades, mas e se eu quiser atualizar só o título, ou só a descrição? ou o título e a descrição mas o id não? É aí que entra o nosso camarada Partial:

Aí sim 😎 , perceba no resultado que a única coisa que mudou foi que todas as propriedades passaram a ter ‘?’ após o seu nome, e também essas propriedades passaram a ter “undefined” no seu tipo, isso acontece por causa da implementação do Partial por debaixo dos panos, que é essa aqui:

Uma dúvida que pode ter surgido é: “se eu tipar uma propriedade como ‘tipo | undefined’, já não basta? Qual a diferença?”

A diferença é que tipar explicitamente como ‘tipo | undefined’ sem o uso da interrogação após o nome da propriedade obriga que a propriedade exista e seja do tipo ‘tipo | undefined’, já ao utilizar o operador ‘?’, como por exemplo, na seguinte sintaxepropriedade?: tipo fará com que a propriedade não precise obrigatoriamente existir, mas caso exista, terá que ser do tipo ‘tipo | undefined’

Importante: ‘| undefined’ é automaticamente inferido pelo typescript por causa do operador ‘?’, mas apenas quando a opção do arquivo tsconfig.json chamada de “exactOptionalPropertyTypes” não está habilitada

Dito isso, bora dar uma olhadinha em mais um exemplo:

Também é importante ressaltar que o Partial não torna propriedades aninhadas opcionais, isto é, se caso exista uma propriedade que é um objeto dentro da sua tipagem, esta propriedade passa a se tornar opcional, mas as propriedades dessa propriedade não, como de costume, bora dar uma olhadinha num exemplo:

Talvez esse não seja o comportamento que você deseja, se quisermos tornar todas as propriedades opcionais, até mesmo as aninhadas, precisaremos de um tipo mapeado recursivo, mas não se preocupe jovem padawan, lhe trarei uma solução pra esse problema, você pode encontrá-la aqui, e também entender como funciona o Partial por baixo dos panos

Conclusão

Ufa, chegamos no fim, entendemos o Partial, vimos casos úteis de uso, vimos várias coisas bacanas como o operador “?”, tipos mapeados, recursão no typescript, o tipo PropertyKey e etc, bom, por hoje é isso, espero que você tenha aprendido sobre o Partial<T> e comece a utilizá-los nos seus projetos, caso tenha achado o artigo útil, vale a pena dar aquela compartilhada, sinta-se livre pra deixar seu feedback nos comentários, pretendo continuar a saga e explicar vários outros utility types, o Partial<T> foi apenas o segundo, então caso queira ficar por dentro, me segue aí e até a próxima :)

--

--