<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>transformar Archives - Hiago Silva Souza</title>
	<atom:link href="https://www.hiago.me/tag/transformar/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hiago.me/tag/transformar/</link>
	<description></description>
	<lastBuildDate>Fri, 16 Oct 2020 20:02:04 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>

<image>
	<url>https://www.hiago.me/wp-content/uploads/2019/01/cropped-icon-hiagus-2-32x32.png</url>
	<title>transformar Archives - Hiago Silva Souza</title>
	<link>https://www.hiago.me/tag/transformar/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">147457425</site>	<item>
		<title>TypeScript: Propriedades requeridas para opcionais</title>
		<link>https://www.hiago.me/2020/10/16/typescript-propriedades-requeridas-para-opcionais/</link>
					<comments>https://www.hiago.me/2020/10/16/typescript-propriedades-requeridas-para-opcionais/#respond</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Fri, 16 Oct 2020 19:57:59 +0000</pubDate>
				<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[intellisense]]></category>
		<category><![CDATA[transformar]]></category>
		<category><![CDATA[type]]></category>
		<category><![CDATA[typescript]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=705</guid>

					<description><![CDATA[<p>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 &#8230;</p>
<p>The post <a href="https://www.hiago.me/2020/10/16/typescript-propriedades-requeridas-para-opcionais/">TypeScript: Propriedades requeridas para opcionais</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Quem nunca precisou aproveitar uma entidade no <a href="http://typescript">TypeScript</a> 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.</p>



<p>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.</p>



<p>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</p>



<p>Vamos aos códigos né?</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
/// entidade-opcional.ts
export type EntidadeOpcional&lt;T&gt; = {
    &#x5B;P in keyof Required&lt;T&gt;]?: Pick&lt;T, P&gt; extends Required&lt;Pick&lt;T, P&gt;&gt; ? T&#x5B;P] : (T&#x5B;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&lt;MinhaEntity&gt;) {
            //// rotinha de update
     }
}


let service: MeuService = new MeuService();

// chamo o autenticar, informando apenas email e senha e não obtenho erro.
this.autenticar({email: &#039;&#039;, senha: &#039;&#039;});
</pre></div>


<h2 class="wp-block-heading">Conclusão</h2>



<p>Bom pessoal, apesar de simples o conteúdo desse post ele me ajudou bastante em um projeto com <a href="https://www.hiago.me/2018/05/13/nestjs-uma-estrutura-nodejs-linda-e-trabalhada/">NestJS</a>. O objetivo é compartilhar esse trechinho de código com vocês sem escrever muita coisa =)</p>



<p>Se o isso te ajudou, deixa um comentário ^^</p>


<p>[wp_ad_camp_3]</p>



<p></p>
<p>The post <a href="https://www.hiago.me/2020/10/16/typescript-propriedades-requeridas-para-opcionais/">TypeScript: Propriedades requeridas para opcionais</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2020/10/16/typescript-propriedades-requeridas-para-opcionais/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">705</post-id>	</item>
	</channel>
</rss>
