Por Ruan Lima, Mobile Developer
1 – Use o tipo unknown em vez de any
Usar o tipo any não é uma boa prática no typescript, por isso devemos evitar o uso. Usar any pode ocultar um potencial problema dentro do seu código e acabamos perdendo um dos maiores benefícios do typescript que é a tipagem forte.
Considere usar o tipo unknown em vez de any quando for necessário. O tipo unknown é muito menos permissivo que o any. O tipo unknown só pode ser atribuído a ele próprio e ao tipo any, diferente do tipo any, que conseguimos atribuir a ele qualquer valor.
No exemplo a seguir vamos ver a diferença entre usar any e unknown.
Nesse exemplo temos a função “a” que recebe um valor do tipo number.
Na função “b”, passamos para a função “a” um valor do tipo any , podemos notar que o editor não sinaliza nenhum erro.
Na função “c”, estamos passando para a função “a”, um valor do tipo unknown . Podemos observar que o editor já nos mostra que existe um erro, pois a função “a” deve receber um valor do tipo number.
2 – Seja específico no seu código
No typescript quanto mais específico formos, vamos poder utilizá- lo da melhor forma possível.
Vamos imaginar que vamos ter uma variável que vai ser uma nota de 1 a 5. Podemos adicionar o tipo dessa variável como number.
Porém se queríamos que essa nota fosse de 1 a 5, quando adicionamos o tipo como number, a variável vai aceitar qualquer número.
Então nesse caso, quando sabemos que o valor dessa variável vai ser de 1 a 5, podemos ser mais específicos, informando isso no nosso código.
Com isso, caso outro valor diferente seja atribuído a essa variável, vamos conseguir identificar este erro rapidamente.
3 – Use enum ou tipos personalizados para restringir valores de string
Em determinados casos, temos que garantir que uma variável do tipo string receba um valor específico. Para essa situação, adicionar o tipo string , não irá resolver esse problema.
No exemplo a seguir, temos uma função “a” que recebe como parâmetro uma variável que deve ser um tipo de linguagem de programação.
Como podemos identificar, quando usamos o tipo string , por mais que na função “b”, esteja sendo passado uma string que não seja um tipo de linguagem de programação, o editor não identifica isso como erro, com isso podemos ter diversos erros dentro da nossa aplicação.
Para resolvermos esse problema, podemos fazer isso de duas formas. A primeira usando um tipo personalizado, como podemos ver:
Agora temos a mesma situação do exemplo anterior, porém na função “a”, fizemos um tipo personalizado, onde informamos que aquele parâmetro deve ser além de uma string, deve ser uma string da lista que informamos. Com isso na função “b”, podemos identificar que o editor já sinaliza que existe um erro nessa função.
Já na função “c”, quando passamos um parâmetro do tipo que informamos, não temos mais esse erro.
A segunda forma que podemos resolver esse problema é utilizando enum:
Seguindo o mesmo exemplo, podemos criar um enum , onde informamos os tipos de linguagem de programação e com isso conseguimos resolver também este problema. Podemos observar que quando tentamos passar qualquer outra string que não seja do tipo ProgrammingLanguages, editor já nos informa que existe um erro.
4 – Partial
Em alguns casos queremos criar um novo tipo baseado em um tipo que já existe na nossa aplicação, mas com as suas propriedades como opcionais.
O typescript oferece o Partial<Type> que conseguimos usar nesse cenário.
No exemplo a seguir conseguimos criar um novo tipo PartialUser onde todas as propriedades que eram obrigatórias no tipo User agora não são mais obrigatórias.
5 – Pick e Omit
Outro caso que podemos ter, é a necessidade de criar um novo tipo, que é semelhante com um tipo já existente na nossa aplicação, porém apenas com algumas propriedades ou sem alguma propriedade.
Vamos imaginar que temos um site de notícias e nele temos diferentes tipos de usuários, temos os administradores, temos os assinantes, autores e temos usuários convidados. Porém todos compartilham algumas informações básicas, como id, username entre outras.
Nesse primeiro exemplo vamos criar o usuário do tipo convidado.
O usuário do tipo convidado, só temos duas informações dele, id, username . Porém aqui conseguimos usar o Pick<Type> e conseguimos criar um novo tipo tendo como base o tipo User .
Agora vamos criar o tipo assinante. O assinante ele vai ter todos os campos que o tipo User tem, porém ele não tem o campo roles.
Para esse caso vamos usar o Omit<Type>.
Para esse caso, faz mais sentido usarmos o Omit<Type>, pois só queremos retirar a propriedade roles.
Conheça nosso GGF™ ϟ 2x + Eficiente