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 ^^

[wp_ad_camp_3]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *