<?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/"
	>

<channel>
	<title>Arquivos código - Serta Apps</title>
	<atom:link href="https://sertastore.com.br/tag/codigo/feed/" rel="self" type="application/rss+xml" />
	<link>https://sertastore.com.br/tag/codigo/</link>
	<description>Tutoriais, aplicativos, notícias e muito mais!</description>
	<lastBuildDate>Tue, 22 Oct 2024 12:58:09 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.8</generator>

<image>
	<url>https://sertastore.com.br/wp-content/uploads/2023/10/icon-sertastore-150x150.png</url>
	<title>Arquivos código - Serta Apps</title>
	<link>https://sertastore.com.br/tag/codigo/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Um tutorial de TypeScript passo a passo para novatos</title>
		<link>https://sertastore.com.br/um-tutorial-de-typescript-passo-a-passo-para-novatos/</link>
					<comments>https://sertastore.com.br/um-tutorial-de-typescript-passo-a-passo-para-novatos/#respond</comments>
		
		<dc:creator><![CDATA[Luana Rizzi]]></dc:creator>
		<pubDate>Tue, 28 Feb 2023 18:59:59 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[código JavaScript]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://drinkouniao.com/?p=80293</guid>

					<description><![CDATA[Você provavelmente já ouviu falar do TypeScript, a linguagem criada e mantida pela Microsoft que teve um grande impacto na [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Você provavelmente já ouviu falar do TypeScript, a linguagem criada e mantida pela Microsoft que teve um grande impacto na Internet, com muitas tarefas pendentes adotando e migrando seu código para o TypeScript. É</span><span style="vertical-align: inherit;"> um superconjunto tipado de JavaScript. </span><span style="vertical-align: inherit;">Em outras palavras, ele fornece </span></span><em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">variações</span></span></em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> para JavaScript. </span><span style="vertical-align: inherit;">No entanto, por que você precisaria dessas variedades? </span><span style="vertical-align: inherit;">Que vantagens eles criam? </span><span class="" style="vertical-align: inherit;">E você deve reescrever sua base de código completa para colher os benefícios deles? </span><span style="vertical-align: inherit;">Essas perguntas e outras serão respondidas neste tutorial do TypeScript para alunos.</span></span></p>
<p>Neste artigo, você vai descobrir como o TypeScript pode reduzir erros no código e oferecer mais segurança, tornando o desenvolvimento mais eficiente. Mesmo que você já conheça JavaScript, este guia irá te acompanhar de forma simples, mostrando como o TypeScript pode melhorar sua experiência de programação.</p>
<p>Prepare-se para aprender algo surpreendente e elevar seu nível no desenvolvimento!</p>
<h2 id="someerroneousjavascriptcode"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Algum código JavaScript impreciso</span></span></h2>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Para começar, vamos dar uma olhada em algum código JavaScript simples bastante comum que você pode encontrar em qualquer base de código. </span><span style="vertical-align: inherit;">Ele busca algumas fotos da </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">API do Pexels</span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> e as insere no DOM.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">No entanto, este código tem vários erros de digitação que vão desencadear problemas. </span><span style="vertical-align: inherit;">Veja se você pode identificá-los:</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript"><span class="token keyword">const</span> <span class="token constant">PEXELS_API_KEY</span> <span class="token operator">=</span> <span class="token string">'...'</span><span class="token punctuation">;</span>

<span class="token keyword">async</span> function <span class="token function">fetchImages</span><span class="token punctuation">(</span><span class="token parameter">searchTerm<span class="token punctuation">,</span> perPage</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> endResult <span class="token operator">=</span> <span class="token keyword control-flow">await</span> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">https://api.pexels.com/v1/search?question=</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>searchTerm<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">&amp;per_page=</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>perPage<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
    headers<span class="token operator">:</span> <span class="token punctuation">{</span>
      <span class="token maybe-class-name">Authorization</span><span class="token operator">:</span> <span class="token constant">PEXELS_API_KEY</span><span class="token punctuation">,</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token keyword">const</span> information <span class="token operator">=</span> <span class="token keyword control-flow">await</span> endResult<span class="token punctuation">.</span><span class="token method function property-access">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token keyword">const</span> imagesContainer <span class="token operator">=</span> document.querySelector<span class="token punctuation">(</span><span class="token string">'#images-container'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token keyword control-flow">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> picture <span class="token keyword">of</span> information<span class="token punctuation">.</span><span class="token property-access">pictures</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> img <span class="token operator">=</span> <span class="token dom variable">doc</span><span class="token punctuation">.createElement('img')</span><span class="token punctuation">;</span>
    img<span class="token punctuation">.</span><span class="token property-access">src</span> <span class="token operator">=</span> picture<span class="token punctuation">.</span><span class="token property-access">src</span><span class="token punctuation">.</span><span class="token property-access">medium</span><span class="token punctuation">;</span>
    imagesContainer<span class="token punctuation">.</span><span class="token method function property-access">append</span><span class="token punctuation">(</span>img<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token function">fetchImages</span><span class="token punctuation">(</span><span class="token string">'canines'</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">fetchImages</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token string">'cats'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">fetchImages</span><span class="token punctuation">(</span><span class="token string">'puppies'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Você pode ver os problemas dentro da instância acima? </span><span style="vertical-align: inherit;">Na verdade, caso você execute esse código em um navegador, você obterá erros instantaneamente; no entanto, ao aproveitar ao máximo o TypeScript, obteremos os erros mais rapidamente, fazendo com que o TypeScript localize esses pontos em nosso editor.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Encurtar esse ciclo de sugestões é eficaz – e será mais útil à medida que a escala do seu desafio aumenta. </span><span style="vertical-align: inherit;">É simples identificar erros nesses 30 traços de código, mas e se você estiver trabalhando em uma base de código com 1000 traços? </span><span style="vertical-align: inherit;">Você veria algum ponto em potencial simplesmente então?</span></span></p>
<p><em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Observação: não é necessário obter uma chave de API do Pexels para acompanhar este tutorial do TypeScript. </span><span style="vertical-align: inherit;">No entanto, se você preferir executar o código, um segredo de API é totalmente gratuito: basta ingressar em </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">uma conta </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">e, em seguida, criar uma.</span></span></em></p>
<h2 id="runningtypescriptfromtheeditor"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Trabalhando TypeScript do Editor</span></span></h2>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Antigamente,<a href="https://www.typescriptlang.org/id/download"> o TypeScript exigia que cada informação fosse escrita como </a></span></span><code>.ts</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">informação. </span><span style="vertical-align: inherit;">No entanto, hoje em dia, a rampa de integração é mais suave. </span><span style="vertical-align: inherit;">Você não quer que um arquivo TypeScript seja escrito em código TypeScript: como substituto, executaremos TypeScript em qualquer arquivo JavaScript que desejarmos!</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Quando você é um usuário do VS Code (não entre em pânico caso não seja &#8211; nós iremos até você!), isso pode funcionar no campo sem mais necessidades. </span><span style="vertical-align: inherit;">Permitiremos a verificação do TypeScript incluindo isso no topo do nosso arquivo JavaScript (é vital que seja a linha principal):</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript">
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Você deve então obter alguns erros carmesim ondulados em seu editor que destacam nossos erros, conforme ilustrado abaixo.</span></span></p>
<p><img decoding="async" src="https://uploads.sitepoint.com/wp-content/uploads/2021/08/1630058335js-code-with-errors.png" alt="TypeScript mostrando erros no VS Code" /></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Você também precisa ver uma cruz no canto esquerdo traseiro com um dois ao lado. </span><span style="vertical-align: inherit;">Clicar nele pode revelar os problemas que foram percebidos.</span></span></p>
<p><img decoding="async" src="https://uploads.sitepoint.com/wp-content/uploads/2021/08/1630061099errors-in-console.jpg" alt="Erros exibidos no console do VS Code" /></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">E só porque você não está no VS Code não significa que você não poderá obter a mesma experiência com os erros de destaque do TypeScript. </span><span style="vertical-align: inherit;">A maioria dos editores hoje usa o Language Server Protocol (também conhecido como LSP), que é o que o VS Code usa para alimentar sua integração com o TypeScript.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Vale a pena pesquisar on-line para encontrar seu editor e os plug-ins úteis para organizá-lo.</span></span></p>
<h2 id="installingandrunningtypescriptlocally"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Colocando e trabalhando o TypeScript regionalmente</span></span></h2>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Quando você não está no VS Code, caso contrário, gostaria de uma resposta normal, você pode até executar o TypeScript na linha de comando. </span><span style="vertical-align: inherit;">Nesta parte, apresentarei caminhos.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Primeiro, vamos gerar um novo desafio. </span><span style="vertical-align: inherit;">Esta etapa pressupõe que você tenha </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">o Node e o npm instalados em sua máquina </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">:</span></span></p>
<pre class="language-bash"><code class="bash language-bash"><span class="token function">mkdir</span> typescript-demo
<span class="token builtin class-name">cd</span> typescript demo
<span class="token function">npm</span> init -y
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Em seguida, adicione TypeScript ao seu desafio:</span></span></p>
<pre class="language-bash"><code class="bash language-bash"><span class="token function">npm</span> <span class="token function">set up</span> --save-dev typescript
</code></pre>
<p><em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Observação: você pode configurar o TypeScript globalmente em sua máquina, mas eu gosto de instalá-lo por projeto. </span><span style="vertical-align: inherit;">Dessa forma, garanto que controlei exatamente qual modelo de TypeScript cada desafio usa. </span><span style="vertical-align: inherit;">Isso é útil, você provavelmente tem um desafio que não toca há algum tempo; </span><span style="vertical-align: inherit;">você pode continuar usando um modelo TS mais antigo nesse desafio, enquanto tem um desafio mais moderado usando um modelo mais moderno.</span></span></em></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Assim que for inserido, você poderá executar o compilador TypeScript ( </span></span><code>tsc</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">) para obter os mesmos erros (não se preocupe com esses outros sinalizadores, pois falaremos mais sobre eles em breve):</span></span></p>
<pre class="language-bash"><code class="bash language-bash">npx tsc index.js --allowJs --noEmit --target es2015
index.js:13:36 - error TS2551: Property <span class="token string">'qerySelector'</span> doesn't exist on <span class="token builtin class-name">sort</span> <span class="token string">'Doc'</span><span class="token builtin class-name">.</span> Did you imply <span class="token string">'querySelector'</span>?

<span class="token number">13</span>   const imagesContainer <span class="token operator">=</span> document.querySelector<span class="token punctuation">(</span><span class="token string">'#images-container'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                                      ~~~~~~~~~~~~

  node_modules/typescript/lib/lib.dom.d.ts:11261:5
    <span class="token number">11261</span>     querySelector<span class="token operator">&lt;</span>Okay extends keyof HTMLElementTagNameMap<span class="token operator">&gt;</span><span class="token punctuation">(</span>selectors: Okay<span class="token punctuation">)</span>: HTMLElementTagNameMap<span class="token punctuation">[</span>K<span class="token punctuation">]</span> <span class="token operator">|</span> null<span class="token punctuation">;</span>
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    <span class="token string">'querySelector'</span> is asserted right here.

index.js:16:9 - error TS2339: Property <span class="token string">'src'</span> doesn't exist on <span class="token builtin class-name">sort</span> <span class="token string">'HTMLElement'</span><span class="token builtin class-name">.</span>

<span class="token number">16</span>     img.src <span class="token operator">=</span> picture.src.medium<span class="token punctuation">;</span>
           ~~~

Discovered <span class="token number">2</span> errors.
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Você poderá ver que o TypeScript na linha de comando destaca os erros de código JavaScript idênticos que o VS Code destacou na captura de tela acima.</span></span></p>
<h2 id="fixingtheerrorsinourjavascriptcode"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Corrigindo os erros em nosso código JavaScript</span></span></h2>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Agora que temos o TypeScript instalado e funcionando, vamos dar uma olhada em como veremos e depois corrigir os erros que o TypeScript está sinalizando.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Vamos verificar nosso primeiro erro.</span></span></p>
<h3 id="propertyqeryselectordoesnotexistontypedocument"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">A propriedade </span></span><code>qerySelector</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">não existe na classificação</span></span><code>Doc</code></h3>
<pre class="language-bash"><code class="bash language-bash">index.js:13:36 - error TS2551: Property <span class="token string">'qerySelector'</span> doesn't exist on <span class="token builtin class-name">sort</span> <span class="token string">'Doc'</span><span class="token builtin class-name">.</span> Did you imply <span class="token string">'querySelector'</span>?

<span class="token number">13</span>   const imagesContainer <span class="token operator">=</span> document.querySelector<span class="token punctuation">(</span><span class="token string">'#images-container'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  node_modules/typescript/lib/lib.dom.d.ts:11261:5
    <span class="token number">11261</span>     querySelector<span class="token operator">&lt;</span>Okay extends keyof HTMLElementTagNameMap<span class="token operator">&gt;</span><span class="token punctuation">(</span>selectors: Okay<span class="token punctuation">)</span>: HTMLElementTagNameMap<span class="token punctuation">[</span>K<span class="token punctuation">]</span> <span class="token operator">|</span> null<span class="token punctuation">;</span>
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    <span class="token string">'querySelector'</span> is asserted right here.
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Isso pode parecer bastante complicado caso você não esteja acostumado a estudar os erros do TypeScript, portanto, não entre em pânico se parecer um pouco estranho! </span><span style="vertical-align: inherit;">O TypeScript notou que, on-line </span></span><code>13</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, nos referimos como uma técnica document.querySelector</span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Queríamos dizer, </span></span><code>doc.querySelector</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">no entanto, cometeu um erro ao digitar. </span><span style="vertical-align: inherit;">Teríamos descoberto isso quando tentamos executar nosso código no navegador, mas o TypeScript está pronto para nos alertar sobre isso mais cedo.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Na metade seguinte, ele destaca </span></span><code>lib.dom.d.ts</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">e a </span></span><code>querySelector&lt;Okay...&gt;</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">operação está mergulhando no código TypeScript mais avançado, então não se preocupe com isso, mas, em um nível alto, é o TypeScript nos mostrando que sabe que existe um método chamado , </span></span><code>querySelector</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">e suspeita nós precisaríamos disso.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Vamos agora ampliar a parte final da mensagem de erro acima:</span></span></p>
<pre class="language-bash"><code class="bash language-bash">index.js:13:36 - error TS2551: Property <span class="token string">'qerySelector'</span> doesn't exist on <span class="token builtin class-name">sort</span> <span class="token string">'Doc'</span><span class="token builtin class-name">.</span> Did you imply <span class="token string">'querySelector'</span>?
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Particularmente, preciso dar uma olhada no conteúdo textual </span></span><code>didn't exist on sort 'Doc'</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">No TypeScript (e amplamente em cada linguagem tipada), os objetos têm o que é chamado de arquivo </span></span><code>sort</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">No TypeScript, números como </span></span><code>1</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">ou </span></span><code>2.5</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">têm o tipo </span></span><code>quantity</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, strings como </span></span><code>"howdy world"</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">têm o tipo </span></span><code>string</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">e uma ocasião de um componente HTML tem o tipo </span></span><code>HTMLElement</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Isso é o que permite ao compilador do TypeScript testar se nosso código está correto. </span><span style="vertical-align: inherit;">Uma vez que ele está ciente do tipo de uma coisa, ele está ciente de quais recursos você pode nomear que levam aquela coisa, ou quais estratégias existem nela.</span></span></p>
<p><em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Observação: se você quiser aprender mais sobre variedades de informações, consulte o guia “ </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Introdução às classificações de informações: estáticas, dinâmicas, robustas e fracas </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">”.</span></span></em></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Em nosso código, o TypeScript viu que nos referimos a </span></span><code>doc</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Isso pode ser uma variável mundial dentro do navegador, e o TypeScript está ciente disso e está ciente de que tem o tipo de arquivo </span></span><code>Doc</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Essa papelada gentil (no caso de você perdoar o trocadilho!) Todas as estratégias que citaremos. </span><span style="vertical-align: inherit;">Esta é a razão pela qual o TypeScript sabe que </span></span><code>querySelector</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">é uma técnica e que o erro ortográfico </span></span><code>qerySelector</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">não é.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Veremos mais desses tipos conforme passamos por outros tutoriais do TypeScript </span></span><!-- link opportunity--><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, mas é daí que vem todo o poder do TypeScript. </span><span style="vertical-align: inherit;">Descreveremos rapidamente nossas variedades pessoais, o que significa que, na verdade, prolongaremos o sistema de classificação para obter informações sobre todo o nosso código e o que faremos ou não com qualquer objeto explícito em nossa base de código.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Agora vamos voltar nossa atenção para nosso erro subseqüente, que é um pouco menos claro.</span></span></p>
<h3 id="propertysrcdoesnotexistontypehtmlelement"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">A propriedade </span></span><code>src</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">não existe na classificação</span></span><code>HTMLElement</code></h3>
<pre class="language-bash"><code class="bash language-bash">index.js:16:9 - error TS2339: Property <span class="token string">'src'</span> doesn't exist on <span class="token builtin class-name">sort</span> <span class="token string">'HTMLElement'</span><span class="token builtin class-name">.</span>

<span class="token number">16</span>     img.src <span class="token operator">=</span> picture.src.medium<span class="token punctuation">;</span>
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Esse é um tipo de erro onde geralmente é necessário olhar um pouco acima do erro para encontrar o problema. </span><span style="vertical-align: inherit;">Todos nós sabemos que um fator de imagem HTML tem um </span></span><code>src</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">atributo, então por que o TypeScript não tem?</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript"><span class="token keyword">const</span> img <span class="token operator">=</span> <span class="token dom variable">doc</span><span class="token punctuation">.createElement('img')</span><span class="token punctuation">;</span>
img<span class="token punctuation">.</span><span class="token property-access">src</span> <span class="token operator">=</span> picture<span class="token punctuation">.</span><span class="token property-access">src</span><span class="token punctuation">.</span><span class="token property-access">medium</span><span class="token punctuation">;</span>
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">O erro aqui está na primeira linha: depois de criar um novo fator de imagem, é necessário nomeá-lo </span></span><code>doc.createElement('img')</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">(porque a tag HTML é </span></span><code>&lt;img&gt;</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, não </span></span><code>&lt;picture&gt;</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">). </span><span style="vertical-align: inherit;">Assim que tentamos isso, o erro desaparece, porque o TypeScript está ciente disso, uma vez que você nomeia </span></span><code>doc.createElement('img')</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, você obtém novamente um componente que possui uma </span></span><code>src</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">propriedade. </span><span style="vertical-align: inherit;">E isso é tudo até as </span></span><em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">variedades</span></span></em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> .</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Enquanto você nomeia </span></span><code>doc.createElement('div')</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, a coisa retornada é do tipo </span></span><code>HTMLDivElement</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Enquanto você nomeia </span></span><code>doc.createElement('img')</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, a coisa retornada é semelhante </span></span><code>HTMLImageElement</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span></span><code>HTMLImageElement</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">tem uma </span></span><code>src</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">propriedade declarada nele, então o TypeScript está ciente de que você poderá nomear </span></span><code>img.src</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">No entanto </span></span><code>HTMLDivElement</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, não, então o TypeScript apresentará erros.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">No caso de </span></span><code>doc.createElement('img')</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, porque o TypeScript não descobre nenhum elemento HTML com a tag </span></span><code>picture</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, ele retornaria um objeto de classificação </span></span><code>HTMLElement</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">(um elemento HTML genérico, não específico de pelo menos uma tag), que também não possui a </span></span><code>src</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">propriedade .</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Assim que repararmos esses dois erros e executarmos novamente o TypeScript, você verá que não obtivemos nada novamente, o que mostra que não houve erros. </span><span style="vertical-align: inherit;">Quando você configurou seu editor para indicar erros, esperamos que nenhum seja exibido.</span></span></p>
<h2 id="howtoconfiguretypescript"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Como você pode configurar o TypeScript</span></span></h2>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">É um pouco trabalhoso adicionar </span></span><code>// @ts-check</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">a cada arquivo, e quando executamos o comando no terminal para adicionar esses outros sinalizadores. </span><span style="vertical-align: inherit;">O TypeScript permite que você, em vez disso, o permita em um desafio de JavaScript criando um </span></span><code>jsconfig.json</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">arquivo.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Crie </span></span><code>jsconfig.json</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">dentro da listagem raiz do nosso desafio e coloque isso dentro dela:</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript"><span class="token punctuation">{</span>
  <span class="token string">"compilerOptions"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
    <span class="token string">"checkJs"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
    <span class="token string">"noEmit"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
    <span class="token string">"goal"</span><span class="token operator">:</span> <span class="token string">"es2015"</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token string">"embrace"</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">"*.js"</span><span class="token punctuation">]</span>
<span class="token punctuation">}</span>
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Isso configura o compilador TypeScript (e a integração TS do seu editor) para:</span></span></p>
<ol>
<li><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Examine as informações do JavaScript (a </span></span><code>checkJs</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">possibilidade).</span></span></li>
<li><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Suponha que estamos construindo em uma atmosfera ES2015 (a </span></span><code>goal</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">possibilidade). </span><span style="vertical-align: inherit;">Padronizar para ES2015 significa que usaremos problemas como garantias sem que o TypeScript nos dê erros.</span></span></li>
<li><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Não produza nenhuma informação compilada (a </span></span><code>noEmit</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">possibilidade). </span><span style="vertical-align: inherit;">Enquanto estiver escrevendo o código TypeScript nas informações de fornecimento do TypeScript, você deseja que o compilador gere o código JavaScript para que você possa executá-lo no navegador. </span><span style="vertical-align: inherit;">Como estamos escrevendo o código JavaScript que opera no navegador, não queremos que o compilador gere nenhuma informação para nós.</span></span></li>
<li><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Por fim, </span></span><code>embrace: ["*.js"]</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">instrui o TypeScript a examinar qualquer arquivo JavaScript na listagem raiz.</span></span></li>
</ol>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Agora que temos este arquivo, você poderá substituir sua instrução de linha de comando por esta:</span></span></p>
<pre class="language-bash"><code class="bash language-bash">npx tsc -p jsconfig.json
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Isso pode executar o compilador com nosso arquivo de configuração ( </span></span><code>-p</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">aqui é a abreviação de “desafio”), para que você não precise cruzar todos esses sinalizadores ao operar o TypeScript.</span></span></p>
<h3 id="workinginstrictmode"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Trabalhando em modo estrito</span></span></h3>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Agora que estamos aqui, vamos ver como tornaremos o TypeScript muito mais completo ao verificar nosso código. </span><span style="vertical-align: inherit;">O TypeScript suporta algo chamado “modo estrito”, que instrui o TypeScript a testar nosso código mais completamente e garantir que lidamos com quaisquer possíveis ocasiões em que, por exemplo, um objeto pode ser </span></span><code>undefined</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Para tornar isso mais claro, vamos ligá-lo e ver quais erros obtemos. </span><span style="vertical-align: inherit;">Adicione </span></span><code>"strict": true</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">a </span></span><code>"compilerOptions"</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">uma parte de e </span></span><code>jsconfig.json</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, em seguida, execute novamente o TypeScript na linha de comando.</span></span></p>
<p><em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Enquanto você faz uma alteração no </span></span><code>jsconfig.json</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">arquivo, pode descobrir que precisa reiniciar o editor para que ele selecione essas modificações. </span><span style="vertical-align: inherit;">Portanto, caso você não esteja vendo os mesmos erros que eu, experimente.</span></span></em></p>
<pre class="language-bash"><code class="bash language-bash">npx tsc -p jsconfig.json
index.js:3:28 - error TS7006: Parameter <span class="token string">'searchTerm'</span> implicitly has an <span class="token string">'any'</span> sort.

<span class="token number">3</span> async function fetchImages<span class="token punctuation">(</span>searchTerm, perPage<span class="token punctuation">)</span> <span class="token punctuation">{</span>
                             ~~~~~~~~~~

index.js:3:40 - error TS7006: Parameter <span class="token string">'perPage'</span> implicitly has an <span class="token string">'any'</span> sort.

<span class="token number">3</span> async <span class="token keyword">function</span> fetchImages<span class="token punctuation">(</span>searchTerm, perPage<span class="token punctuation">)</span> <span class="token punctuation">{</span>
                                         ~~~~~~~

index.js:15:5 - error TS2531: Object is probably <span class="token string">'null'</span><span class="token builtin class-name">.</span>

<span class="token number">15</span>     imagesContainer.append<span class="token punctuation">(</span>img<span class="token punctuation">)</span><span class="token punctuation">;</span>
       ~~~~~~~~~~~~~~~

Discovered <span class="token number">3</span> errors.
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Vamos começar com o erro final primeiro e estão disponíveis novamente para os outros:</span></span></p>
<pre class="language-bash"><code class="bash language-bash">index.js:15:5 - error TS2531: Object is probably <span class="token string">'null'</span><span class="token builtin class-name">.</span>

<span class="token number">15</span>     imagesContainer.append<span class="token punctuation">(</span>img<span class="token punctuation">)</span><span class="token punctuation">;</span>
       ~~~~~~~~~~~~~~~
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">E vamos dar uma olhada em como </span></span><code>imagesContainer</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">é delineado:</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript"><span class="token keyword">const</span> imagesContainer <span class="token operator">=</span> <span class="token dom variable">doc</span><span class="token punctuation">.</span><span class="token method function property-access">querySelector</span><span class="token punctuation">(</span><span class="token string">'#images-container'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Ativar o </span></span><code>strict</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">modo tornou o TypeScript mais rigoroso em garantir que os valores com os quais contamos existam. </span><span style="vertical-align: inherit;">Neste caso, não é garantido que </span></span><code>doc.querySelector('#images-container')</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">realmente retornará um componente; </span><span style="vertical-align: inherit;">e se não for descoberto? </span></span><code>doc.querySelector</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">retornará </span></span><code>null</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">se um componente não for descoberto e agora habilitamos o modo estrito, o TypeScript está nos dizendo que </span></span><code>imagesContainer</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">pode ser realmente </span></span><code>null</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">.</span></span></p>
<h3 id="uniontypes"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Classificações de União</span></span></h3>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Antes de ativar o modo estrito, o tipo </span></span><code>imagesContainer</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">era </span></span><code>Component</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, mas agora ativamos o modo estrito, o tipo </span></span><code>imagesContainer</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">é </span></span><code>Component | null</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">O </span></span><code>|</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">operador (pipe) cria variedades de união &#8211; que você aprenderá como &#8220;ou&#8221; &#8211; então aqui </span></span><code>imagesContainer</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">é de tipo </span></span><code>Component</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">ou </span></span><code>null</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Quando o TypeScript nos diz </span></span><code>Object is probably 'null'</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, é exatamente isso que está nos dizendo e quer que tenhamos certeza de que a coisa existe antes de usá-la.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Vamos corrigir isso lançando um erro caso não descubramos o fator de contêiner de fotos:</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript"><span class="token keyword">const</span> imagesContainer <span class="token operator">=</span> <span class="token dom variable">doc</span><span class="token punctuation">.</span><span class="token method function property-access">querySelector</span><span class="token punctuation">(</span><span class="token string">'#images-container'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword control-flow">if</span> <span class="token punctuation">(</span>imagesContainer <span class="token operator">===</span> <span class="token keyword null nil">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword control-flow">throw</span> <span class="token keyword">new</span> <span class="token class-name">Error</span><span class="token punctuation">(</span><span class="token string">'Couldn't discover images-container factor.'</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token keyword control-flow">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> picture <span class="token keyword">of</span> information<span class="token punctuation">.</span><span class="token property-access">pictures</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> img <span class="token operator">=</span> <span class="token dom variable">doc</span><span class="token punctuation">.</span><span class="token method function property-access">createElement</span><span class="token punctuation">(</span><span class="token string">'img'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  img<span class="token punctuation">.</span><span class="token property-access">src</span> <span class="token operator">=</span> picture<span class="token punctuation">.</span><span class="token property-access">src</span><span class="token punctuation">.</span><span class="token property-access">medium</span><span class="token punctuation">;</span>
  imagesContainer<span class="token punctuation">.</span><span class="token method function property-access">append</span><span class="token punctuation">(</span>img<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">O TypeScript agora está satisfeito; </span><span style="vertical-align: inherit;">lidamos com o </span></span><code>null</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">caso lançando um erro. </span><span style="vertical-align: inherit;">O TypeScript é sábio o suficiente para entender agora que, se nosso código não gerar um erro na terceira linha do trecho acima, </span></span><code>imagesContainer</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">não é </span></span><code>null</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, e devido a esse fato deve existir e deve ser do tipo </span></span><code>Component</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Seu tipo era </span></span><code>Component | null</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, mas quando era, </span></span><code>null</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">poderíamos ter gerado um erro, então agora deveria ser </span></span><code>Component</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Esse desempenho é chamado de </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">redução de classificação </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">e é uma ideia realmente útil para se prestar atenção.</span></span></p>
<h3 id="implicitany"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Implícito qualquer</span></span></h3>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Agora vamos mudar nossa consideração para os dois erros restantes que temos:</span></span></p>
<pre class="language-bash"><code class="bash language-bash">index.js:3:28 - error TS7006: Parameter <span class="token string">'searchTerm'</span> implicitly has an <span class="token string">'any'</span> sort.

<span class="token number">3</span> async function fetchImages<span class="token punctuation">(</span>searchTerm, perPage<span class="token punctuation">)</span> <span class="token punctuation">{</span>
                             ~~~~~~~~~~

index.js:3:40 - error TS7006: Parameter <span class="token string">'perPage'</span> implicitly has an <span class="token string">'any'</span> sort.

<span class="token number">3</span> async function fetchImages<span class="token punctuation">(</span>searchTerm, perPage<span class="token punctuation">)</span> <span class="token punctuation">{</span>
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Uma das muitas implicações de ativar o modo estrito é que ele ativa uma regra conhecida como </span></span><code>noImplicitAny</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Por padrão, quando o TypeScript não conhece o tipo de uma coisa, o padrão é fornecer uma classificação específica do TypeScript chamada </span></span><code>any</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span></span><code>any</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">não é um tipo bom de se ter em seu código, porque não há nenhum guia relacionado a ele por meio do que o compilador testará. </span><span style="vertical-align: inherit;">Vai permitir que algo ocorra.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Prefiro imaginá-lo porque o compilador levanta os braços no ar e diz “Não posso ajudar aqui!” </span><span style="vertical-align: inherit;">A utilização </span></span><code>any</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">desativa qualquer verificação de classificação útil para essa variável individual, por isso recomendo fortemente evitá-la.</span></span></p>
<h2 id="describethefunctionsignaturewithjsdoc"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Descrever a assinatura de operação com JSDoc</span></span></h2>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Os 2 erros acima são TypeScript nos dizendo que não informamos quais são as variedades das 2 variáveis ​​que nossa operação usa e que as está padronizando novamente para </span></span><code>any</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">A boa notícia é que fornecer essas informações ao TypeScript significava reescrever seu arquivo no código </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">TypeScript </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">;</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Por exemplo, aqui está como apresentaremos as informações de classificação para nossa </span></span><code>fetchImages</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">operação:</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript">
<span class="token keyword">async</span> function <span class="token function">fetchImages</span><span class="token punctuation">(</span><span class="token parameter">searchTerm<span class="token punctuation">,</span> perPage</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  
<span class="token punctuation">}</span>
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Todos os comentários JSDoc devem começar com </span></span><code>/**</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">(palavra o adicional </span></span><code>*</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">no início) e dentro deles usamos tags específicas, começando com </span></span><code>@</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, para indicar as propriedades de classificação. </span><span style="vertical-align: inherit;">Aqui declaramos dois parâmetros ( </span></span><code>@param</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">), e depois colocamos sua classificação entre chaves (idênticos aos objetos JavaScript comuns).</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Aqui deixamos claro que </span></span><code>searchTerm</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">é a </span></span><code>string</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">e </span></span><code>perPage</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">é uma quantidade. </span><span style="vertical-align: inherit;">Enquanto estamos nisso, também usamos </span></span><code>@return</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">para declarar o que essa operação retorna. </span><span style="vertical-align: inherit;">No nosso caso, não retorna nada, e a classificação que usamos no TypeScript para declarar isso é </span></span><code>void</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Vamos agora executar novamente o compilador e ver o que ele diz:</span></span></p>
<pre class="language-bash"><code class="bash language-bash">npx tsc -p jsconfig.json
index.js:30:13 - error TS2345: Argument of <span class="token builtin class-name">sort</span> <span class="token string">'quantity'</span> isn't assignable to parameter of <span class="token builtin class-name">sort</span> <span class="token string">'string'</span><span class="token builtin class-name">.</span>

<span class="token number">30</span> fetchImages<span class="token punctuation">(</span><span class="token number">5</span>, <span class="token string">'cats'</span><span class="token punctuation">)</span>
               ~

index.js:31:1 - error TS2554: Anticipated <span class="token number">2</span> arguments, however obtained <span class="token number">1</span>.

<span class="token number">31</span> fetchImages<span class="token punctuation">(</span><span class="token string">'puppies'</span><span class="token punctuation">)</span>
   ~~~~~~~~~~~~~~~~~~~~~~

  index.js:9:40
    <span class="token number">9</span> async function fetchImages<span class="token punctuation">(</span>searchTerm, perPage<span class="token punctuation">)</span> <span class="token punctuation">{</span>
                                             ~~~~~~~
    An argument <span class="token keyword">for</span> <span class="token string">'perPage'</span> was not supplied.

Discovered <span class="token number">2</span> errors.
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Essa é a coisa fantástica sobre o TypeScript. </span><span style="vertical-align: inherit;">Dando mais informações ao compilador, ele provavelmente agora detectará erros em como estamos chamando o código que não poderia antes. </span><span style="vertical-align: inherit;">Neste caso, são descobertas duas chamadas para </span></span><code>fetchImages</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">o local onde obtivemos os argumentos dentro da ordem falaciosa, e a segunda para o local onde esquecemos o </span></span><code>perPage</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">argumento (nenhum dos dois </span></span><code>searchTerm</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, </span></span><code>perPage</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">são parâmetros eletivos).</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Vamos simplesmente excluir essas chamadas, no entanto, espero que ajude a mostrar a facilidade do compilador e as vantagens de fornecer ao compilador mais informações de classificação.</span></span></p>
<h2 id="declaringdatatypesusinganinterface"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Declarando classificações de informações usando uma interface</span></span></h2>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Embora não seja sinalizado pelo compilador, uma preocupação que nosso código tem está nesta linha:</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript"><span class="token keyword">const</span> information <span class="token operator">=</span> <span class="token keyword control-flow">await</span> endResult<span class="token punctuation">.</span><span class="token method function property-access">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">O problema aqui é que o tipo de retorno </span></span><code>await endResult.json()</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">é </span></span><code>any</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">É porque, uma vez que você pega uma resposta da API e a converte em JSON, o TypeScript não tem noção de quais informações estão lá, então o padrão é </span></span><code>any</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">No entanto, como todos sabemos o que a API Pexels retorna, podemos fornecer algumas informações de classificação por meio do uso de </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">interfaces TypeScript </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Isso nos permite informar o TypeScript em relação à </span></span><em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">forma</span></span></em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> de um objeto: quais propriedades ele possui e quais valores essas propriedades possuem.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Vamos declarar uma interface — mais uma vez, utilizando a sintaxe JSDoc, que representa as informações retornadas da API do Pexels. </span><span style="vertical-align: inherit;">Usei </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">a referência da API Pexels </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">para determinar quais informações são retornadas. </span><span style="vertical-align: inherit;">Neste caso, vamos realmente delinear duas interfaces: uma irá declarar a forma de um single </span></span><code>picture</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">que a API Pexels retorna, e a outra irá declarar a forma geral da resposta da API.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Para delinear essas interfaces usando JSDoc, usamos </span></span><code>@typedef</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, que nos permite declarar variedades mais avançadas. </span><span style="vertical-align: inherit;">Em seguida, usamos </span></span><code>@property</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">para declarar propriedades únicas nessa interface. </span><span style="vertical-align: inherit;">Por exemplo, aqui está o tipo que eu crio para uma pessoa </span></span><code>Picture</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">As classificações devem sempre começar com uma letra maiúscula.</span></span></p>
<p><em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Se você preferir ver uma referência completa de todo o desempenho JSDoc suportado, o </span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">site do TypeScript tem uma lista completa com exemplos</span></span></em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> .</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript">
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Esse tipo diz que qualquer objeto digitado como a </span></span><code>Picture</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">pode ter uma propriedade, </span></span><code>src</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, que é um objeto com três propriedades de string: </span></span><code>medium</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, </span></span><code>massive</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">e </span></span><code>thumbnail</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Você descobrirá que a API Pexels retorna mais; </span><span style="vertical-align: inherit;">você não precisa declarar cada propriedade que um objeto possui caso não precise, mas apenas o subconjunto que deseja. </span><span style="vertical-align: inherit;">Aqui, nosso aplicativo atualmente usa apenas a </span></span><code>medium</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">imagem, mas declarei alguns outros tamanhos que precisaríamos mais cedo ou mais tarde.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Agora que temos esse sort, vamos declarar o sort </span></span><code>PexelsSearchResponse</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, que pode caracterizar o que obtemos novamente da API:</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript">
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Esse é o lugar onde você poderá ver o valor de declarar suas variedades pessoais; </span><span style="vertical-align: inherit;">nós declaramos que este objeto tem uma propriedade, </span></span><code>pictures</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">e então declaramos que seu valor é uma matriz, onde cada mercadoria é desse tipo </span></span><code>Picture</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Isso é o que a </span></span><code>Array&lt;X&gt;</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">sintaxe denota: é uma matriz onde cada mercadoria dentro da matriz é de tipo </span></span><code>X</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span></span><code>[1, 2, 3]</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">poderia ser um </span></span><code>Array&lt;quantity&gt;</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, por exemplo.</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Assim que conseguirmos isso, usaremos a </span></span><code>@sort</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">observação JSDoc para informar ao TypeScript que as informações que obtemos novamente endResult</span></span><code>.json()</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">são do tipo </span></span><code>PexelsSearchResponse</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">:</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript">
<span class="token keyword">const</span> information <span class="token operator">=</span> <span class="token keyword control-flow">await endResult</span><span class="token punctuation">.</span><span class="token method function property-access">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p><code>@sort</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">não é algo que você deva obter regularmente. </span><span style="vertical-align: inherit;">Normalmente, você precisa que o compilador resolva de forma inteligente o tipo de problema, razoavelmente do que deve informá-lo sem rodeios. </span><span style="vertical-align: inherit;">Mas, como resultado de endResult</span></span><code>.json()</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">return </span></span><code>any</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">, podemos substituir isso por nossa classificação.</span></span></p>
<h3 id="testifeverythingisworking"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Dê uma olhada se todo o lote está funcionando</span></span></h3>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Para mostrar que isso está funcionando, escrevi errado intencionalmente </span></span><code>medium</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">ao referenciar o URL da imagem:</span></span></p>
<pre class="language-javascript"><code class="javascript language-javascript"><span class="token keyword control-flow">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> picture <span class="token keyword">of</span> information<span class="token punctuation">.</span><span class="token property-access">pictures</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> img <span class="token operator">=</span> <span class="token dom variable">doc</span><span class="token punctuation">.</span><span class="token method function property-access">createElement</span><span class="token punctuation">(</span><span class="token string">'img'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  img<span class="token punctuation">.</span><span class="token property-access">src</span> <span class="token operator">=</span> picture<span class="token punctuation">.</span><span class="token property-access">src</span><span class="token punctuation">.</span><span class="token property-access">mediun</span><span class="token punctuation">;</span> 
  imagesContainer<span class="token punctuation">.</span><span class="token method function property-access">append</span><span class="token punctuation">(</span>img<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Se executarmos o TypeScript mais uma vez, veremos o problema que o TypeScript não teria notado se não tivéssemos conseguido o trabalho que simplesmente fizemos para declarar a interface:</span></span></p>
<pre class="language-bash"><code class="bash language-bash">index.js:35:25 - error TS2551: Property <span class="token string">'mediun'</span> doesn't exist on <span class="token builtin class-name">sort</span> <span class="token string">'{ medium: string; massive: string; thumbnail: string; }'</span><span class="token builtin class-name">.</span> Did you imply <span class="token string">'medium'</span>?

<span class="token number">35</span>     img.src <span class="token operator">=</span> picture.src.mediun<span class="token punctuation">;</span>
                           ~~~~~~

  index.js:18:18
    <span class="token number">18</span>    * @property <span class="token punctuation">{</span><span class="token punctuation">{</span>medium: string, massive: string, thumbnail: string<span class="token punctuation">}</span><span class="token punctuation">}</span> src
                        ~~~~~~
    <span class="token string">'medium'</span> is asserted right here.

Discovered <span class="token number">1</span> error.
</code></pre>
<h2 id="conclusion"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Conclusão</span></span></h2>
<div class="flex max-w-full flex-col flex-grow">
<div class="min-h-8 text-message flex w-full flex-col items-end gap-2 whitespace-normal break-words [.text-message+&amp;]:mt-5" dir="auto" data-message-author-role="assistant" data-message-id="63476cd3-4c34-4822-99aa-e5065cbf07ce" data-message-model-slug="gpt-4o">
<div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>Em resumo, explorar o TypeScript abre portas para uma codificação mais segura, eficiente e robusta, oferecendo tipagem estática que ajuda a evitar erros comuns no JavaScript. Ao adotar essa poderosa ferramenta, você garante um código mais organizado e fácil de manter, sem sacrificar a flexibilidade que tanto apreciamos no desenvolvimento web.</p>
<p>Agora que você já conhece os principais benefícios do TypeScript, por que não colocá-los em prática? Experimente aplicá-lo no seu próximo projeto ou até migrar parte do seu código atual para ver a diferença na prática. O resultado será um código mais confiável, com menos retrabalho e mais produtividade.</p>
<p>A jornada para se tornar um desenvolvedor mais eficiente começa com pequenos passos. Teste o TypeScript hoje mesmo e sinta a diferença que ele pode fazer no seu fluxo de trabalho. O próximo grande avanço na sua carreira está a apenas uma linha de código de distância!</p>
</div>
</div>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://sertastore.com.br/um-tutorial-de-typescript-passo-a-passo-para-novatos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
