<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Joel Sebastião Mbengui</title>
    <description>The latest articles on DEV Community by Joel Sebastião Mbengui (@jsmbengui).</description>
    <link>https://dev.to/jsmbengui</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F831641%2F3cce4e3f-2909-4f19-99c9-7c434614abe1.jpeg</url>
      <title>DEV Community: Joel Sebastião Mbengui</title>
      <link>https://dev.to/jsmbengui</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jsmbengui"/>
    <language>en</language>
    <item>
      <title>Generic em Typescript</title>
      <dc:creator>Joel Sebastião Mbengui</dc:creator>
      <pubDate>Mon, 28 Mar 2022 15:09:01 +0000</pubDate>
      <link>https://dev.to/jsmbengui/generic-em-typescript-224f</link>
      <guid>https://dev.to/jsmbengui/generic-em-typescript-224f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Neste post eu vou dar uma introdução sobre o que é e como usar generic em typescript. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Generic é um funcionalidade que permite criar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;componentes&lt;/li&gt;
&lt;li&gt;funções&lt;/li&gt;
&lt;li&gt;interfaces&lt;/li&gt;
&lt;li&gt;classes &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;que aceitam  uma variedade de tipos de dados ao invés de um.&lt;/p&gt;

&lt;p&gt;Com o uso de generic damos a possibilidade da nossa função poder ser usada em diferentes situações, e removendo a duplicidade de código.&lt;/p&gt;

&lt;p&gt;Generic aparecem em typescript dentro de colchetes angulares, no formato &lt;strong&gt;&lt;/strong&gt; onde &lt;strong&gt;T&lt;/strong&gt; vai representar o tipo de dado.&lt;br&gt;
E &lt;strong&gt;&lt;/strong&gt; é lido como generic do tipo &lt;strong&gt;T&lt;/strong&gt;, e este tipo &lt;strong&gt;T&lt;/strong&gt; pode ser usado como tipo de dado para qualquer parâmetro  ou variável dentro da &lt;strong&gt;função&lt;/strong&gt;, &lt;strong&gt;classe&lt;/strong&gt; ou &lt;strong&gt;interface&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function info(value: string) {
  return value
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos um função normal que aceita um valor do tipo string e retorna, mas tem casos pretendemos usar a nossa função em cenários onde o &lt;strong&gt;value&lt;/strong&gt; pode ser outro tipo de dado, ai chega o ponto em pensar em generic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function info&amp;lt;T&amp;gt;(value: T) {
  return value
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com a adição de info*&lt;em&gt;&lt;/em&gt;* tornamos a nossa função generic, possibilitando assim que ela receba diferentes tipos de dados para a variável value.&lt;/p&gt;

&lt;p&gt;Em typescript generic pode ser usado com &lt;strong&gt;função&lt;/strong&gt;, &lt;strong&gt;classe&lt;/strong&gt; ou &lt;strong&gt;interface&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generics com função&lt;/strong&gt;&lt;br&gt;
Para usar generic com função basta adicionar &lt;strong&gt;&amp;lt;&amp;gt;&lt;/strong&gt; depois do nome da função, e dentro de &lt;strong&gt;&amp;lt;&amp;gt;&lt;/strong&gt; colocar a lista dos tipos de dados que a função vai receber&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function info&amp;lt;T&amp;gt;(...) { ... }

function pickValue&amp;lt;T, K&amp;gt;(...) {...}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nota que os tipos de dados do generic não são usados apenas para os parâmetros da função, eles podem ser usados como tipo de dados para todo e qualquer componente dentro da função.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async function fetchApi&amp;lt;ResultType&amp;gt;(path: string): Promise&amp;lt;ResultType&amp;gt; {
  const response = await fetch(`https://api.joelmbengui${path}`);
  return response.json();
}

type Info = {
  name: string
}
const data = await fetchApi&amp;lt;Info&amp;gt;('/info');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Generics com Interfaces, Classes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Na criação de interfaces ou classes, temos muita vantagem ao usar generic, pois conseguimos cobrir uma grande variedade de situação para a nossa interface ou classe&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interface&lt;/strong&gt;&lt;br&gt;
Para criar um interface ou classe generic, adicionamos a lista de tipos depois do nome da interface ou classe&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface GenericInterface&amp;lt;T&amp;gt; {
  value: T
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui declaramos uma interface que tem uma propriedade value e onde o tipo vai ser determinado quando passarmos o valor de &lt;strong&gt;T&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Queue&amp;lt;T&amp;gt; {
  private data = []
  push = (item: T) =&amp;gt; this.data.push(item)
  pop = (): T =&amp;gt; this.shift();
}

const queue = new Queue&amp;lt;number&amp;gt;();
queue.push(0)
queue.push("1") // ERROR: can push string 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui criamos uma pilha que pode ser usada para diferentes cenários, seja ele quando precisamos de um pilha de números, string, alunos, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;br&gt;
Neste pequeno tutorial falamos sobre generic, como usá-la em funções , interface e classes.&lt;/p&gt;

&lt;p&gt;E podemos notar que o bom uso de generic, vai nos ajudar a evitar repetir código e deixar as nossas funções, interfaces e classes mais flexíveis.&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>generic</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
