TypeScript: Propriedades requeridas para opcionais
Quem nunca precisou aproveitar uma entidade no TypeScript e acabou criando uma classe auxiliar só por conta das propriedades obrigatórias? Porque não criar um type para transformar propriedades requeridas em opcionais.
Um exemplo disso é a rotina de update com o TypeORM, você quer atualizar somente algumas propriedades e se você definir a sua entidade na assinatura do seu método você acaba tendo que fazer um cast só para o intellisense parar de te perturbar.
Para resolver esse problema com o type do TypeScript, com o código abaixo você cria um tipo de dado que irá estender o tipo de sua entidade e retornar um tipo com as mesmas propriedades como opcionais e tudo isso de forma dinâmica. Assim você conseguirá transformar propriedades requeridas em opcionais
Vamos aos códigos né?
/// entidade-opcional.ts export type EntidadeOpcional<T> = { [P in keyof Required<T>]?: Pick<T, P> extends Required<Pick<T, P>> ? T[P] : (T[P] | undefined); } /// minha-entity.ts export class UsuarioEntity { id: number; nome: string; telefone?: string; email: string; senha: string; } /// service.ts export class LoginService { autenticar(minhaEntity: EntidadeOpcional<MinhaEntity>) { //// rotinha de update } } let service: MeuService = new MeuService(); // chamo o autenticar, informando apenas email e senha e não obtenho erro. this.autenticar({email: '', senha: ''});
Conclusão
Bom pessoal, apesar de simples o conteúdo desse post ele me ajudou bastante em um projeto com NestJS. O objetivo é compartilhar esse trechinho de código com vocês sem escrever muita coisa =)
Se o isso te ajudou, deixa um comentário ^^