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 ^^
[wp_ad_camp_3]