<?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>Forem: Marlon Frade</title>
    <description>The latest articles on Forem by Marlon Frade (@marlonfrade).</description>
    <link>https://forem.com/marlonfrade</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%2F909133%2F2bdef145-7696-4854-947e-ba0ee07d1aa3.jpeg</url>
      <title>Forem: Marlon Frade</title>
      <link>https://forem.com/marlonfrade</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/marlonfrade"/>
    <language>en</language>
    <item>
      <title>Como utilizar ferramentas de automação de mídias sociais para melhorar sua presença online e aumentar o alcance do seu blog</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Tue, 13 Jun 2023 11:14:02 +0000</pubDate>
      <link>https://forem.com/marlonfrade/como-utilizar-ferramentas-de-automacao-de-midias-sociais-para-melhorar-sua-presenca-online-e-aumentar-o-alcance-do-seu-blog-1ei</link>
      <guid>https://forem.com/marlonfrade/como-utilizar-ferramentas-de-automacao-de-midias-sociais-para-melhorar-sua-presenca-online-e-aumentar-o-alcance-do-seu-blog-1ei</guid>
      <description>&lt;p&gt;Se você é um blogueiro ou dono de uma empresa, é fundamental ter uma presença online forte e ativa nas mídias sociais. No entanto, manter todas as suas contas de mídia social atualizadas pode ser uma tarefa árdua e consumir muito tempo. É aí que entram as ferramentas de automação de mídias sociais.&lt;/p&gt;

&lt;p&gt;Essas ferramentas permitem que você agende suas postagens com antecedência, analise o desempenho de suas contas, monitore as menções de sua marca e muito mais. Isso pode economizar uma quantidade significativa de tempo e esforço, permitindo que você se concentre em outras áreas importantes do seu blog ou empresa.&lt;/p&gt;

&lt;p&gt;Neste artigo, vamos dar uma olhada em algumas das melhores ferramentas de automação de mídias sociais disponíveis e como você pode usá-las para melhorar sua presença online.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Hootsuite
&lt;/h2&gt;

&lt;p&gt;Hootsuite é uma das ferramentas de automação de mídias sociais mais populares e conhecidas. Com o Hootsuite, você pode gerenciar várias contas de mídia social em uma única plataforma. Ele permite que você agende postagens, monitore menções, acompanhe a análise de suas contas e muito mais. Além disso, ele oferece uma ampla gama de integrações com outras ferramentas de marketing.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Buffer
&lt;/h2&gt;

&lt;p&gt;O Buffer é outra ferramenta popular de gerenciamento de mídia social. Ele permite que você agende postagens para várias contas de mídia social, além de oferecer análises detalhadas sobre o desempenho de suas contas. O Buffer também tem integrações com outras ferramentas de marketing, como o Google Analytics.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Sprout Social
&lt;/h2&gt;

&lt;p&gt;O Sprout Social é uma ferramenta de gerenciamento de mídia social mais avançada, com recursos de monitoramento e análise aprimorados. Ele permite que você agende postagens, monitore menções, acompanhe as análises de suas contas e muito mais. Além disso, ele oferece uma gama de recursos avançados, como relatórios personalizados, análises de concorrentes e gerenciamento de equipe.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. CoSchedule
&lt;/h2&gt;

&lt;p&gt;O CoSchedule é uma ferramenta de gerenciamento de marketing all-in-one que inclui recursos de gerenciamento de mídia social. Ele permite que você agende postagens, crie um calendário de conteúdo, analise o desempenho de suas contas e muito mais. O CoSchedule também tem integrações com outras ferramentas de marketing, como o WordPress e o Google Analytics.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. MeetEdgar
&lt;/h2&gt;

&lt;p&gt;MeetEdgar é uma ferramenta de automação de mídias sociais que se concentra na reutilização de conteúdo. Ele permite que você organize seu conteúdo em categorias e, em seguida, agende as postagens para que o conteúdo seja compartilhado regularmente. Isso é particularmente útil se você tiver um blog com um grande volume de conteúdo já publicado.&lt;/p&gt;

&lt;p&gt;Conclusão:&lt;/p&gt;

&lt;p&gt;As ferramentas de automação de mídias sociais podem economizar muito tempo e esforço, permitindo que você se concentre em outras áreas importantes do seu&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>blog</category>
      <category>cms</category>
    </item>
    <item>
      <title>Como utilizar o Obsidian para melhorar sua produtividade na criação e organização de conteúdo para seu blog</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Tue, 13 Jun 2023 11:13:23 +0000</pubDate>
      <link>https://forem.com/marlonfrade/como-utilizar-o-obsidian-para-melhorar-sua-produtividade-na-criacao-e-organizacao-de-conteudo-para-seu-blog-3c3g</link>
      <guid>https://forem.com/marlonfrade/como-utilizar-o-obsidian-para-melhorar-sua-produtividade-na-criacao-e-organizacao-de-conteudo-para-seu-blog-3c3g</guid>
      <description>&lt;p&gt;Se você é um criador de conteúdo, sabe o quanto é importante ter um sistema eficiente para gerenciar suas ideias, notas e rascunhos. O Obsidian é uma ferramenta poderosa que pode ajudá-lo a aumentar sua produtividade na criação e organização de conteúdo para seu blog.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é Obsidian?
&lt;/h2&gt;

&lt;p&gt;Obsidian é um aplicativo de anotações que utiliza o formato Markdown e oferece recursos avançados de organização e pesquisa. Com ele, você pode criar um banco de dados interconectado de notas que pode ajudá-lo a organizar suas ideias, rascunhos e referências em um único lugar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como o Obsidian pode ajudar na criação de conteúdo para o seu blog?
&lt;/h2&gt;

&lt;p&gt;Com o Obsidian, você pode facilmente criar e organizar notas relacionadas a seus projetos de conteúdo. Isso inclui ideias para posts, esboços de artigos, listas de tópicos e muito mais. Você pode facilmente criar links entre as notas para criar uma rede interconectada de informações relacionadas.&lt;/p&gt;

&lt;p&gt;Além disso, o Obsidian oferece recursos avançados de pesquisa que permitem encontrar rapidamente informações relevantes. Por exemplo, você pode pesquisar por palavras-chave em todas as suas notas para encontrar informações relacionadas a um determinado tópico.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como começar a usar o Obsidian para melhorar sua produtividade na criação de conteúdo para o seu blog?
&lt;/h2&gt;

&lt;p&gt;Para começar a utilizar o Obsidian, basta baixar o aplicativo e criar uma conta. Em seguida, você pode começar a criar suas notas e organizar suas informações. É recomendável que você aprenda o básico do formato Markdown para tirar o máximo proveito da ferramenta.&lt;/p&gt;

&lt;p&gt;O Obsidian oferece uma grande variedade de recursos e plugins para personalizar a experiência de usuário. Você pode começar com as funcionalidades básicas e, em seguida, ir adicionando mais recursos à medida que se torna mais confortável com a ferramenta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Atalhos de Teclado para o Obsidian
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Atalhos Básicos
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shortcut Key&lt;/th&gt;
&lt;th&gt;Functions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + S&lt;/td&gt;
&lt;td&gt;Editor: Saves the file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + N&lt;/td&gt;
&lt;td&gt;Creates a new note&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + P&lt;/td&gt;
&lt;td&gt;Open command pallete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + O&lt;/td&gt;
&lt;td&gt;Opens Quick Switcher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + Shift + F&lt;/td&gt;
&lt;td&gt;Search in all files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + G&lt;/td&gt;
&lt;td&gt;Opens graph view&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + Alt + ←&lt;/td&gt;
&lt;td&gt;Navigate Back&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + Alt + →&lt;/td&gt;
&lt;td&gt;Navigate forth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + F&lt;/td&gt;
&lt;td&gt;Searches current file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + E&lt;/td&gt;
&lt;td&gt;Toggle edit/preview modes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + ,&lt;/td&gt;
&lt;td&gt;Open Settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + Tab&lt;/td&gt;
&lt;td&gt;Next tab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + Shift + Tab&lt;/td&gt;
&lt;td&gt;Previous tab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alt + Tab&lt;/td&gt;
&lt;td&gt;Next App&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alt + Shift + Tab&lt;/td&gt;
&lt;td&gt;Previous App&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Win + Tab&lt;/td&gt;
&lt;td&gt;Task View&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Win + Shift + Tab&lt;/td&gt;
&lt;td&gt;Next Window&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Atalhos de edição 🕹️
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shortcut Key&lt;/th&gt;
&lt;th&gt;Functions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + B&lt;/td&gt;
&lt;td&gt;Bold Selected Text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + I&lt;/td&gt;
&lt;td&gt;Italicize Selected Text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + K&lt;/td&gt;
&lt;td&gt;Insert External Link to Selected Text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + ]&lt;/td&gt;
&lt;td&gt;Indent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + &lt;code&gt;[&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Unindent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + D&lt;/td&gt;
&lt;td&gt;Delete current line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + V&lt;/td&gt;
&lt;td&gt;Duplicate current line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + Click&lt;/td&gt;
&lt;td&gt;Open Note in Current Panel via Link&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + Shift + Click&lt;/td&gt;
&lt;td&gt;Open Note in New Panel via Link&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O Obsidian pode ser uma ferramenta poderosa para ajudá-lo a melhorar sua produtividade na criação e organização de conteúdo para seu blog. Com seus recursos avançados de organização e pesquisa, você pode facilmente criar uma rede interconectada de informações relacionadas e encontrar rapidamente informações relevantes. Experimente o Obsidian e veja como ele pode ajudá-lo a ser mais produtivo!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>obsidian</category>
    </item>
    <item>
      <title>Como criar um site progressivo com o uso de PWA (Progressive Web Apps)</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Tue, 13 Jun 2023 11:12:59 +0000</pubDate>
      <link>https://forem.com/marlonfrade/como-criar-um-site-progressivo-com-o-uso-de-pwa-progressive-web-apps-hm</link>
      <guid>https://forem.com/marlonfrade/como-criar-um-site-progressivo-com-o-uso-de-pwa-progressive-web-apps-hm</guid>
      <description>&lt;p&gt;As Progressive Web Apps (PWAs) são um conjunto de técnicas para criar sites que se comportam como aplicativos nativos, oferecendo uma experiência de usuário imersiva, responsiva e com alta performance. Neste artigo, vamos discutir como criar um site progressivo com o uso de PWA.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é uma PWA?
&lt;/h2&gt;

&lt;p&gt;Uma Progressive Web App é um site que usa tecnologias modernas para oferecer uma experiência de usuário semelhante a um aplicativo nativo. As PWAs são construídas com base em três pilares principais: segurança, desempenho e acessibilidade. Além disso, as PWAs também oferecem recursos avançados, como notificações push, armazenamento offline e integração com o sistema operacional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como criar uma PWA?
&lt;/h2&gt;

&lt;p&gt;Para criar uma PWA, você precisa seguir alguns passos:&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 1: Tornar o site responsivo
&lt;/h3&gt;

&lt;p&gt;Para que o site seja responsivo e funcione em diferentes dispositivos, é importante usar técnicas de design responsivo, como usar media queries e layouts flexíveis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 2: Tornar o site seguro
&lt;/h3&gt;

&lt;p&gt;Para tornar o site seguro, é necessário usar HTTPS para proteger a comunicação entre o servidor e o cliente. Isso ajuda a evitar ataques de hackers e protege a privacidade do usuário.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 3: Adicionar um manifesto
&lt;/h3&gt;

&lt;p&gt;O manifesto da PWA é um arquivo JSON que define as configurações da PWA, como o nome, ícone, cor de fundo, tela inicial e outros recursos. O manifesto deve ser adicionado ao cabeçalho do site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 4: Adicionar um Service Worker
&lt;/h3&gt;

&lt;p&gt;O Service Worker é um script JavaScript que roda em segundo plano e gerencia o cache do site. Ele permite que o site funcione offline e oferece um desempenho melhorado, armazenando os recursos em cache.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 5: Adicionar recursos avançados
&lt;/h3&gt;

&lt;p&gt;Além dos recursos básicos, as PWAs também oferecem recursos avançados, como notificações push, armazenamento offline e integração com o sistema operacional. Esses recursos podem ser adicionados usando APIs da Web modernas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;As Progressive Web Apps são uma ótima maneira de oferecer uma experiência de usuário imersiva, responsiva e com alta performance. Para criar uma PWA, é necessário tornar o site responsivo, seguro e adicionar um manifesto e um Service Worker. Além disso, você também pode adicionar recursos avançados, como notificações push, armazenamento offline e integração com o sistema operacional. Ao seguir essas etapas, você pode criar um site progressivo e oferecer uma experiência de usuário de alta qualidade para seus usuários.&lt;/p&gt;

</description>
      <category>pwa</category>
      <category>webdev</category>
    </item>
    <item>
      <title>As melhores práticas para desenvolver interfaces acessíveis</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Tue, 13 Jun 2023 11:12:35 +0000</pubDate>
      <link>https://forem.com/marlonfrade/as-melhores-praticas-para-desenvolver-interfaces-acessiveis-3l14</link>
      <guid>https://forem.com/marlonfrade/as-melhores-praticas-para-desenvolver-interfaces-acessiveis-3l14</guid>
      <description>&lt;p&gt;A acessibilidade é um aspecto fundamental do design de interfaces, mas muitas vezes é negligenciada. Interfaces acessíveis não são apenas importantes para pessoas com deficiência, mas também para melhorar a experiência do usuário em geral. Neste artigo, vamos discutir algumas das melhores práticas para desenvolver interfaces acessíveis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use tags apropriadas
&lt;/h2&gt;

&lt;p&gt;As tags apropriadas ajudam os usuários a entender o conteúdo e a navegar em sua interface. Ao desenvolver sua interface, certifique-se de usar tags apropriadas, como &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;, etc. Isso ajudará os usuários a entender a estrutura da página e a encontrar o conteúdo relevante com mais facilidade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adicione descrições alternativas a imagens
&lt;/h2&gt;

&lt;p&gt;Para usuários que utilizam leitores de tela, é importante adicionar descrições alternativas a imagens. Essas descrições explicam o conteúdo da imagem e ajudam a fornecer uma experiência mais completa para o usuário. Certifique-se de usar descrições claras e concisas, que descrevam o conteúdo da imagem de forma adequada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use cores com contraste suficiente
&lt;/h2&gt;

&lt;p&gt;Para usuários com deficiência visual, é importante usar cores com contraste suficiente. Certifique-se de que o texto e os elementos da interface possuam contraste suficiente para serem facilmente legíveis. Existem várias ferramentas disponíveis para testar o contraste de cores em sua interface, como o Contrast Checker do WebAIM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use teclado para navegação
&lt;/h2&gt;

&lt;p&gt;Para usuários que não conseguem usar o mouse, é importante usar o teclado para navegação. Certifique-se de que todos os elementos da interface possuam foco de teclado e possam ser navegados com as teclas TAB e SHIFT+TAB. Além disso, certifique-se de que todas as interações possam ser realizadas usando apenas o teclado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifique a ordem de leitura
&lt;/h2&gt;

&lt;p&gt;Para usuários que utilizam leitores de tela, é importante verificar a ordem de leitura da página. Certifique-se de que a ordem de leitura esteja correta, seguindo a ordem visual da página. Isso ajudará os usuários a entenderem melhor o conteúdo da página e a navegar com mais facilidade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Desenvolver interfaces acessíveis é importante para fornecer uma experiência positiva para todos os usuários. Usar tags apropriadas, adicionar descrições alternativas a imagens, usar cores com contraste suficiente, usar o teclado para navegação e verificar a ordem de leitura são algumas das melhores práticas para desenvolver interfaces acessíveis. Ao seguir essas práticas, você pode criar interfaces mais inclusivas e acessíveis para todos os usuários.&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>Tudo o que você precisa saber sobre Flexbox e Grid Layout</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Tue, 13 Jun 2023 11:12:17 +0000</pubDate>
      <link>https://forem.com/marlonfrade/tudo-o-que-voce-precisa-saber-sobre-flexbox-e-grid-layout-heo</link>
      <guid>https://forem.com/marlonfrade/tudo-o-que-voce-precisa-saber-sobre-flexbox-e-grid-layout-heo</guid>
      <description>&lt;p&gt;Se você é um desenvolvedor front-end, provavelmente já ouviu falar de Flexbox e Grid Layout. Ambas são técnicas de layout CSS poderosas que podem ajudá-lo a criar layouts flexíveis e responsivos em seus projetos. Neste artigo, vamos discutir tudo o que você precisa saber sobre Flexbox e Grid Layout.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é Flexbox?
&lt;/h2&gt;

&lt;p&gt;Flexbox é uma técnica de layout CSS que permite criar layouts flexíveis e responsivos. Com Flexbox, você pode criar layouts baseados em um sistema de caixas flexíveis que podem ser facilmente organizadas em uma única linha ou coluna, ou em várias linhas e colunas. Flexbox é especialmente útil para criar layouts para dispositivos móveis e telas pequenas.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é Grid Layout?
&lt;/h2&gt;

&lt;p&gt;Grid Layout é outra técnica de layout CSS que permite criar layouts flexíveis e responsivos. Com Grid Layout, você pode criar layouts baseados em uma grade de linhas e colunas. Isso permite que você organize facilmente o conteúdo em um layout complexo, com controle preciso sobre a posição e o tamanho dos elementos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flexbox vs Grid Layout
&lt;/h2&gt;

&lt;p&gt;Flexbox e Grid Layout têm algumas diferenças importantes. Flexbox é mais adequado para layouts baseados em uma única linha ou coluna, enquanto Grid Layout é mais adequado para layouts baseados em uma grade de linhas e colunas. Além disso, Flexbox é mais adequado para layouts simples, enquanto Grid Layout é mais adequado para layouts complexos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como Usar Flexbox e Grid Layout
&lt;/h2&gt;

&lt;p&gt;Para usar Flexbox e Grid Layout em seus projetos, você precisa entender as propriedades CSS que controlam essas técnicas. Algumas das propriedades mais importantes incluem:&lt;/p&gt;

&lt;h3&gt;
  
  
  Propriedades do Flexbox
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;display: flex&lt;/code&gt;: define o elemento como um contêiner flexível.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;flex-direction&lt;/code&gt;: define a direção principal dos itens flexíveis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;justify-content&lt;/code&gt;: define a posição dos itens flexíveis ao longo do eixo principal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;align-items&lt;/code&gt;: define a posição dos itens flexíveis ao longo do eixo secundário.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Propriedades do Grid Layout
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;display: grid&lt;/code&gt;: define o elemento como um contêiner de grade.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;grid-template-rows&lt;/code&gt; e &lt;code&gt;grid-template-columns&lt;/code&gt;: definem o número e o tamanho das linhas e colunas da grade.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;grid-row-start&lt;/code&gt; e &lt;code&gt;grid-row-end&lt;/code&gt;, &lt;code&gt;grid-column-start&lt;/code&gt; e &lt;code&gt;grid-column-end&lt;/code&gt;: definem a posição e o tamanho dos elementos na grade.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Flexbox e Grid Layout são técnicas poderosas de layout CSS que podem ajudá-lo a criar layouts flexíveis e responsivos em seus projetos. Ao entender as diferenças entre essas duas técnicas e as propriedades CSS associadas a cada uma delas, você pode criar facilmente layouts complexos e responsivos para seus projetos front-end.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>development</category>
    </item>
    <item>
      <title>10 Dicas para Melhorar a Performance do seu Site</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Mon, 29 May 2023 20:59:53 +0000</pubDate>
      <link>https://forem.com/marlonfrade/10-dicas-para-melhorar-a-performance-do-seu-site-4ep4</link>
      <guid>https://forem.com/marlonfrade/10-dicas-para-melhorar-a-performance-do-seu-site-4ep4</guid>
      <description>&lt;p&gt;Melhorar a performance do seu site pode ser uma tarefa desafiadora, mas é fundamental para oferecer uma experiência de usuário satisfatória e garantir um bom posicionamento nos resultados de busca do Google. Neste artigo, apresentaremos 10 dicas práticas para melhorar a performance do seu site.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Otimize suas imagens
&lt;/h2&gt;

&lt;p&gt;Imagens pesadas podem afetar significativamente a performance do seu site. Certifique-se de otimizar suas imagens para a web, escolhendo um formato adequado e comprimindo-as adequadamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Use uma CDN
&lt;/h2&gt;

&lt;p&gt;Uma CDN (Content Delivery Network) pode ajudar a melhorar a velocidade de carregamento do seu site, distribuindo o conteúdo para servidores localizados em diferentes partes do mundo.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Minimize o uso de plugins e scripts
&lt;/h2&gt;

&lt;p&gt;Plugins e scripts podem adicionar funcionalidades interessantes ao seu site, mas também podem afetar negativamente a performance. Evite usar plugins e scripts desnecessários e mantenha apenas aqueles que são realmente importantes.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Use um sistema de cache
&lt;/h2&gt;

&lt;p&gt;Usar um sistema de cache pode ajudar a reduzir o tempo de carregamento do seu site, armazenando temporariamente o conteúdo para que ele possa ser rapidamente acessado pelos usuários.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Priorize o conteúdo acima da aparência
&lt;/h2&gt;

&lt;p&gt;A aparência do seu site é importante, mas é ainda mais importante garantir que o conteúdo seja carregado rapidamente. Priorize o conteúdo acima da aparência e evite adicionar elementos desnecessários que possam afetar a performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Comprima seus arquivos
&lt;/h2&gt;

&lt;p&gt;Comprimir seus arquivos pode ajudar a reduzir o tamanho das páginas e, consequentemente, melhorar a performance do seu site. Use ferramentas como Gzip ou Brotli para comprimir seus arquivos.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Reduza o número de redirecionamentos
&lt;/h2&gt;

&lt;p&gt;Redirecionamentos desnecessários podem afetar negativamente a performance do seu site. Reduza o número de redirecionamentos sempre que possível e certifique-se de que os redirecionamentos existentes estejam funcionando corretamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Use fontes da web
&lt;/h2&gt;

&lt;p&gt;Usar fontes da web pode ajudar a melhorar a aparência do seu site, mas é importante escolher fontes que sejam otimizadas para a web e que não afetem negativamente a performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Minimize o uso de animações e efeitos
&lt;/h2&gt;

&lt;p&gt;Animações e efeitos podem adicionar interatividade ao seu site, mas também podem afetar a performance. Use animações e efeitos com moderação e certifique-se de que eles sejam otimizados para a web.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Teste a performance regularmente
&lt;/h2&gt;

&lt;p&gt;Testar a performance do seu site regularmente pode ajudar a identificar problemas e oportunidades de melhoria. Use ferramentas como o Google PageSpeed Insights ou o WebPageTest para testar a performance do seu site e identificar áreas que precisam ser melhoradas.&lt;/p&gt;

&lt;p&gt;Espero que essas dicas ajudem a melhorar a performance do seu site!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Typescript - Alguns conceitos básicos</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Mon, 29 May 2023 19:55:46 +0000</pubDate>
      <link>https://forem.com/marlonfrade/typescript-alguns-conceitos-basicos-1aed</link>
      <guid>https://forem.com/marlonfrade/typescript-alguns-conceitos-basicos-1aed</guid>
      <description>&lt;h2&gt;
  
  
  👋 Fala Dev,
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;A seguir teremos anotações sobre typescript, o curso irá abordar os principais conceitos e projetos na prática.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;h2&gt;
  
  
  O que é o Typescript?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Typescript é um superset para a linguagem JavaScript&lt;/li&gt;
&lt;li&gt;Ou seja, adiciona funções ao JavaScript, como a declaração de tipos de variável.&lt;/li&gt;
&lt;li&gt;Pode ser utilizado no desenvolvimento de projetos com NodeJS e express para criação de APIS, e bibliotecas como React.&lt;/li&gt;
&lt;li&gt;Precisa ser compilado pra JavaScript, pois não executamos TS;&lt;/li&gt;
&lt;li&gt;Desenvolvido e mantido pela Microsoft&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Exemplo
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;antes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;depois&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Inferencia X Annotation
&lt;/h2&gt;

&lt;p&gt;Ao trabalhar com projetos em typescript, será necessário estar familiarizado com qual caminho de tipagem seu código irá seguir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Inferencia X Annotation&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="c1"&gt;// z="teste" -- erro&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou seja, podemos perceber que na inferência o Typescript entende a qual tipo a variável está sendo atribuída.&lt;/p&gt;

&lt;p&gt;Porém cabe ressaltar que nem sempre a inferência vai funcionar, dado os contextos de cada situação, sendo necessário a recorrência da tipagem conforme segundo exemplo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Analisando Tipagem Básica
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Marlon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isAdmin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;String !== string&lt;/code&gt; - Em javascript nós temos os objetos que são em letra maiúscula, e as variáveis em letras minúsculas, porém em Typescript sempre iremos trabalhar com as letras minúsculas&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lembrando que o console do teu tipo deve ser o tipo que será utilizado para declarar o tipo da variável.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Analisando a Tipagem de Objetos
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Array
&lt;/h4&gt;

&lt;p&gt;Para trabalhar com listas e arrays, devemos utilizar a seguinte sintaxe:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myNumbers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;//declaramos o array como sendo um array de numbers&lt;/span&gt;
&lt;span class="c1"&gt;//sendo assim já podemos utilizar as propriedades do array como:&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myNumbers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;myNumbers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;myNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myNumbers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Tuple
&lt;/h4&gt;

&lt;p&gt;No python, as tuplas são arrays cujos valores inseridos não podem ser modficados, no typescript, as tuplas terão suas tipagens declaradas dentro do array, como no exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;myTuple&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]];&lt;/span&gt;

&lt;span class="nx"&gt;myTuple&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;teste&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;span class="c1"&gt;// myTuple = [true, false, true] -- erro&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Object Literals
&lt;/h4&gt;

&lt;p&gt;Ao declarar objetos, uma chaves irá receber a tipagem dos dados, enquanto que a segunda chaves irá receber os dados de informação, por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//object literals -&amp;gt; {prop: value}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Marlon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// user.job = "programador" -- erro&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Analisando Tipagem Múltipla
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Any
&lt;/h4&gt;

&lt;p&gt;O any foi feito pra aceitar qualquer tipo, indo contra a "filosofia" do typescript, mas também para definirmos uma variável que pode receber qualquer tipo de valor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;teste&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Lembrando que o any não deve ser utilizado em qualquer circunstância, mas sim dentro de um contexto específico onde não se pode prever o tipo do valor retornado ou declarado. Utilizá-lo fora desse contexto pode ser considerado uma má prática.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Union Type
&lt;/h4&gt;

&lt;p&gt;Uma das formas de se unir tipos para criar um outro tipo mais complexo, pode ser chamado de union type. Essa seria uma maneira mais ==typescript== de se resolver os problemas de utilização de &lt;code&gt;any&lt;/code&gt; fora de contexto, ou seja, não sabemos se os dados serão retornados em &lt;code&gt;string&lt;/code&gt; ou &lt;code&gt;number&lt;/code&gt;, aí ao invés de se utilizar o &lt;code&gt;any&lt;/code&gt; podemos aderir ao union type, como no caso do id que dependendo do formato do projeto pode ser retornado como &lt;code&gt;string&lt;/code&gt;&lt;br&gt;
ou &lt;code&gt;number&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// id = true -- erro&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Type Alias
&lt;/h4&gt;

&lt;p&gt;Uma maneira eficiente de se criar código limpo e reutilizável é usando o type alias, como uma solução para o caso de decidir adicionar mais um tipo a variável ID do exemplo anterior, não sendo necessário deixar o código extenso, podemos adicionar um alias e reduzir a tipagem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;myIdType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;myIdType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;myIdType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;shirId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;myIdType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// id = true -- erro&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Enum
&lt;/h4&gt;

&lt;p&gt;Um tipo de dado que enumera uma coleção para trabalharmos dados mais complexos de uma maneira mais simples, por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// exemplo: tamanho de roupas (size: Médio, size: Pequeno)&lt;/span&gt;

&lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;Size&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;P&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pequeno&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;M&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Médio&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;G&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Grande&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;camisa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Camisa Gola V&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;P&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;camisa&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Analisando Tipagem Literal
&lt;/h2&gt;

&lt;p&gt;Podemos aplicar valores literais para um tipo, sendo assim impossível que esse valor seja alterado posteriormente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;teste&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;algumvalor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// teste = "outrovalor" -- erro&lt;/span&gt;

&lt;span class="nx"&gt;teste&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;algumvalor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Geralmente para poder resetar o valor aplicado a sua variável devemos usar o union type para declarar que a variável pode ser null, por exemplo&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;teste2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;algumvalor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;teste2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;algumvalor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;teste2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Analisando Funções
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Função Básica
&lt;/h4&gt;

&lt;p&gt;Para se criar uma função no typescript, devemos usar a mesma semântica do javascript, porém todos os argumentos passados para a função devem ser tipados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// console.log(sum("12", true)); -- erro&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Tipagem do Retorno
&lt;/h4&gt;

&lt;p&gt;Além de informar o tipo do parâmetro que estamos declarando, caso uma função tenha retorno, podemos declarar como no primeiro exemplo, e quando a função não possui retorno utilizamos a declaração do void para fazer a tipagem do retorno da função.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Estamos informando que o retorno da função &lt;/span&gt;
&lt;span class="c1"&gt;// deve ser uma string&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sayHelloTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Hello &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;sayHelloTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Marlon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// Quando a função não retornar nada como no &lt;/span&gt;
&lt;span class="c1"&gt;// exemplo abaixo podemos usar o void&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello World&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Parâmetros opcionais
&lt;/h4&gt;

&lt;p&gt;Caso algum dos parâmetros da função sejam opcionais como no exemplo abaixo, podemos utilizar o ==?== e fazer as devidas tratativas de condicionais.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Olá, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Olá, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Olá, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Marlon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Marlon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sir&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Ao usar o "?", colocamos o greet como opcional, não sendo obrigatório o parâmetro. Porém perceba que há um erro de lógica acima, onde o log do greet virá como undefined, o typescript não aponta esse erro pois colocamos o parâmetro como opcional, sendo responsabilidade do desenvolvedor tratar essa obrigatoriedade, como no exemplo acima.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Interfaces
&lt;/h2&gt;

&lt;p&gt;As interfaces são um recurso do typescript que veio para o javascript, que padronizam algo para que possamos reutilizar como um tipo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;MathFunctionsParams&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;n1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;n2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// perceba que são dois parâmetros para uma função matemática, porém usando interface(objeto) e enum&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sumNumbers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MathFunctionsParams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;n1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;n2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sumNumbers&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;n1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;n2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// utilizando de outras formas&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;someNumbers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MathFunctionsParams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;n1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;n2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;multiplyNumbers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MathFunctionsParams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;n1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;n2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;multiplyNumbers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;someNumbers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Narrowing
&lt;/h2&gt;

&lt;p&gt;Quando não sabemos qual tipo exato será o parâmetro de uma função, mas precisamos fazer uma tratativa com esses resultados, podemos usar o narrowing do typeof para tratar as condicionais:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;info&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`O número é &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Não foi passado nenhum número`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao verificar o typeof de um parâmetro, estamos usando um narrowing de typeof para garantir que o retorno será de acordo com o parâmetro passado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generics
&lt;/h2&gt;

&lt;p&gt;Um outro recurso do typescript é o generics, que para se evitar um any, pode ser aplicado em diferentes situações que possuem a necessidade de se declarar um tipo genérico, que pode receber mais de um tipo de valor não esperado, como uma função que mostra os itens de um array, porém não sabemos se os itens virão como number, string, ao invés do any podemos utilizar o generics para declarar um tipo genérico seguindo a seguinte linha de desenvolvimento&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;showArrayItems&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nf"&gt;showArrayItems&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;showArrayItems&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Usamos a tag &amp;lt;&amp;gt; após o nome da função para remeter a algo genérico, como por exemplo T e U (que são mais utilizados no typescript). No caso acima utilizamos a tag T referenciando dentro do parâmetro para exemplificar que esperamos receber qualquer tipo de dado nesse array, porém sendo mais especificado que um simples any.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Classes
&lt;/h2&gt;

&lt;p&gt;Class é um método de orientação a objeto utilizado para definir novas classes como no exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;isApproved&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isApproved&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isApproved&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;isApproved&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;marlon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Marlon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;marlon&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Na utilização de classes, precisamos usar um constructor pois o typescript solicita numa class a tipagem dos dados e um inicializador, portanto sendo mais sucinto declarar os tipos num constructor e utilizar a tipagem por inferência, ou seja, declarar no constructor os tipos e atribuir aos valores do objeto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Podemos também utilizar os constructor para criar métodos, como por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;isApproved&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isApproved&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isApproved&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;isApproved&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;showUserName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`O nome do usuário é &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;marlon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Marlon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;marlon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;showUserName&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Um outro exemplo utilizando parâmetros:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;isApproved&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isApproved&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isApproved&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;isApproved&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;showUserRole&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;canShow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;canShow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`O role do usuário é &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`informação restrita!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;marlon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Marlon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;marlon&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;marlon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;showUserRole&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;marlon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;showUserRole&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Interfaces em classes
&lt;/h2&gt;

&lt;p&gt;Interfaces é o core da orientação a objetos, geralmente sendo utilizada para ditar como uma classe irá se comportar. Sendo muito útil em projetos onde há classes que são muito parecidas, ou seja, tendo um padrão entre elas. Um exemplo de uma interface de veículos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IVehicle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;showBrand&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;IVehicle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;wheels&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;wheels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;brand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wheels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;wheels&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;showBrand&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`A marca do carro é &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mustang&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ford&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;mustang&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;showBrand&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Para criar interfaces, utiliza-se a letra "I" no início do nome para especificar que será uma interface. No exemplo acima, a interface "IVehicle" é utilizada na class "Car" através do comando "implements".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Herança
&lt;/h2&gt;

&lt;p&gt;Uma class também pode herdar outra class, como por exemplo, criando uma nova class Super Car que herda os tipos da class no exemplo anterior Car:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SuperCar&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;wheels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;wheels&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// criando uma nova class supercar com herança&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SuperCar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Audi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;showBrand&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;No exemplo acima utilizamos uma nova class que possui sua herança da class Car, porém nessa nova class adicionamos a nova chave "engine". Para se utilizar o constructor dentro da class herdada, devemos passar os tipos que declaramos no constructor "pai" e o novo declarado no constructor filho, e para atribuir os valores, utilizamos o "super" para extrair esses valores da class "pai".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Decorators
&lt;/h2&gt;

&lt;p&gt;Os decorators são um recurso do typescript muito utilizados para validação de dados, para construir um evento observável em alguma class ou função. Um recurso complexo para quem é iniciante no typescript. Porém caso deseje utilizar, lembre-se de habilitar o mesmo dentro do seu arquivo de configuração, através da chave &lt;code&gt;experimentalDecorators&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos a class Person que recebe a variável name quando o usuário é criado, porém se quiser adicionar um id e uma data de criação para esse usuário, podemos utilizar um constructor, uma vez que não é o usuário que preenche essas informações, ambas devem ser geradas pelo sistema.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Constructor são funções que retornam outras funções que contenham as informações que queremos alterar na class base.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;BaseParams&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;new &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;extends&lt;/span&gt; &lt;span class="kd"&gt;constructor&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;createdAt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//Chamando o constructor&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;BaseParams&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newUserMarlon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Marlon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newUserMarlon&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;A função baseParams basicamente cria os parâmetros base para a criação de qualquer outra class, nesse caso contendo um id e uma data de criação.&lt;/p&gt;

&lt;p&gt;Para trabalhar com construtores, devemos esperar qualquer tipo de argumento, pois como serão parâmetros base para as classes, teremos provavelmente classes diferentes umas das outras, portanto adotar uma abordagem mais genérica, tentando sempre evitar o any. Para isso utilizaremos a tag genérica.&lt;/p&gt;

&lt;p&gt;Para utilizar um constructor devemos usar o "@" para exemplificar que estamos utilizando um constructor dentro do código.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Configurando o Projeto
&lt;/h2&gt;

&lt;p&gt;Verificar se o typescript está instalado na máquina:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx tsc &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou usando yarn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn tsc &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso não tenha o typescript instalado na sua máquina, verifique a &lt;a href="https://www.typescriptlang.org/download" rel="noopener noreferrer"&gt;documentação&lt;/a&gt; para poder instalar de acordo com seu gerenciador de pacotes preferido.&lt;/p&gt;

&lt;p&gt;Assim que tiver o arquivo instalado na máquina, pode prosseguir com o seguinte comando para iniciar um arquivo de configuração:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Certifique-se de já estar dentro do seu diretório&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx tsc &lt;span class="nt"&gt;--init&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arquivo de configuração criado, pode-se alterar esse arquivo &lt;code&gt;tsconfig.json&lt;/code&gt; da seguinte maneira:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rootDir&lt;/code&gt;  - Diretório root, deve ser alterado para onde ficará armazenado o index.ts da sua aplicação (No caso do projeto a pasta src);&lt;/p&gt;

&lt;p&gt;&lt;code&gt;outDir&lt;/code&gt; - Diretório de saída, deve ser apontado o diretório que será compilado o arquivo javascript, nesse caso dentro da pasta dist na pasta js&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Para validar, crie seu "Hello World" no arquivo &lt;code&gt;index.ts&lt;/code&gt; e para compilar rode no seu terminal o comando &lt;code&gt;npx tsc&lt;/code&gt;, e certifique-se se a leitura do arquivo de entrada e saída estão de acordo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;target&lt;/code&gt; - O target define a linguagem javascript que será compilada, portanto certifique-se de utilizar a versão que mais se adapta ao seu projeto.&lt;/p&gt;

&lt;p&gt;Ao final, sua estrutura deve ficar parecido com algo tipo isso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;├──&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;dist&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;build)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;│&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;├──&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;js&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;│&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;│&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;├──&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;index.js&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;│&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;├──&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;index.html&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;├──&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;src&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;│&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;├──&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;index.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;└──&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tsconfig.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Compilando o Projeto
&lt;/h2&gt;

&lt;p&gt;Para que o arquivo index.js seja observado pelo typescript para que qualquer alteração seja alterado novamente, podemos usar o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx tsc &lt;span class="nt"&gt;-w&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Se você utiliza o VScode como IDE, pode-se usar a extensão live-server para abrir um servidor para servir sua aplicação estática, e tendo acesso ao console poderá ver o javascript que está sendo gerado pelo typescript.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Como utilizar o Raycast para automatizar tarefas repetitivas e aumentar sua produtividade</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Wed, 24 May 2023 01:02:11 +0000</pubDate>
      <link>https://forem.com/marlonfrade/como-utilizar-o-raycast-para-automatizar-tarefas-repetitivas-e-aumentar-sua-produtividade-21bo</link>
      <guid>https://forem.com/marlonfrade/como-utilizar-o-raycast-para-automatizar-tarefas-repetitivas-e-aumentar-sua-produtividade-21bo</guid>
      <description>&lt;p&gt;Você já perdeu tempo navegando em vários aplicativos para realizar uma única tarefa? Já pensou em como seria incrível se pudesse automatizar suas tarefas diárias e economizar tempo? Se você respondeu sim a essas perguntas, então o Raycast pode ser a solução para você.&lt;/p&gt;

&lt;p&gt;O Raycast é uma ferramenta de produtividade que permite automatizar tarefas repetitivas e acessar rapidamente seus aplicativos favoritos por meio de atalhos de teclado. Com o Raycast, você pode realizar tarefas como enviar e-mails, criar lembretes, iniciar chamadas de vídeo e muito mais sem sair da tela do seu computador.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que usar o Raycast?
&lt;/h2&gt;

&lt;p&gt;O Raycast é uma ferramenta útil para qualquer pessoa que deseja economizar tempo e aumentar sua produtividade. Com o Raycast, você pode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Acessar rapidamente seus aplicativos favoritos usando atalhos de teclado.&lt;/li&gt;
&lt;li&gt;  Automatizar tarefas repetitivas para economizar tempo.&lt;/li&gt;
&lt;li&gt;  Enviar mensagens e-mails, criar lembretes, iniciar chamadas de vídeo e muito mais sem sair da tela do seu computador.&lt;/li&gt;
&lt;li&gt;  Pesquisar rapidamente arquivos, pastas e até mesmo sites usando atalhos de teclado.&lt;/li&gt;
&lt;li&gt;  Personalizar sua experiência com plug-ins que atendam às suas necessidades específicas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Como começar a usar o Raycast?
&lt;/h2&gt;

&lt;p&gt;Para começar a usar o Raycast, você precisa primeiro baixar o aplicativo em seu site oficial. O Raycast é compatível com Mac e requer macOS 10.14 ou superior.&lt;/p&gt;

&lt;p&gt;Depois de baixar e instalar o aplicativo, você pode começar a personalizar suas configurações e atalhos de teclado. O Raycast oferece várias opções de personalização, incluindo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Adicionando atalhos de teclado para seus aplicativos favoritos.&lt;/li&gt;
&lt;li&gt;  Adicionando plug-ins que correspondam às suas necessidades específicas.&lt;/li&gt;
&lt;li&gt;  Personalizando a aparência do aplicativo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depois de personalizar suas configurações, você pode começar a usar o Raycast para automatizar suas tarefas diárias e acessar rapidamente seus aplicativos favoritos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O Raycast é uma ferramenta útil para qualquer pessoa que deseja economizar tempo e aumentar sua produtividade. Com o Raycast, você pode automatizar tarefas repetitivas e acessar rapidamente seus aplicativos favoritos usando atalhos de teclado. Além disso, o Raycast oferece várias opções de personalização para atender às suas necessidades específicas. Experimente o Raycast hoje e comece a economizar tempo em suas tarefas diárias.&lt;/p&gt;

</description>
      <category>raycast</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Raindrop - como organizar suas referências e bookmarks de forma eficiente para melhorar seu fluxo de trabalho</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Wed, 24 May 2023 00:59:10 +0000</pubDate>
      <link>https://forem.com/marlonfrade/raindrop-como-organizar-suas-referencias-e-bookmarks-de-forma-eficiente-para-melhorar-seu-fluxo-de-trabalho-33jb</link>
      <guid>https://forem.com/marlonfrade/raindrop-como-organizar-suas-referencias-e-bookmarks-de-forma-eficiente-para-melhorar-seu-fluxo-de-trabalho-33jb</guid>
      <description>&lt;p&gt;Se você é uma pessoa que utiliza muito a internet para trabalho ou estudo, provavelmente se depara com uma grande quantidade de informações e referências diariamente. Para organizar todas essas informações, uma solução muito útil é o Raindrop.&lt;/p&gt;

&lt;p&gt;O Raindrop é uma ferramenta de bookmarking que permite salvar links, imagens e vídeos de forma organizada em uma única plataforma. Com ele, é possível categorizar as referências por assunto, tags ou pastas, o que ajuda na busca e no acesso rápido às informações salvas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como usar o Raindrop
&lt;/h2&gt;

&lt;p&gt;Para começar a usar o Raindrop, é necessário criar uma conta no site oficial. Depois de criar a conta, você pode instalar a extensão do Raindrop para o seu navegador de preferência.&lt;/p&gt;

&lt;p&gt;Com a extensão instalada, sempre que encontrar uma página, imagem ou vídeo que queira salvar, basta clicar no ícone do Raindrop que estará no canto superior direito da tela. Ao clicar no ícone, uma janela será aberta para que você possa escolher a pasta, tag ou categoria em que deseja salvar a referência.&lt;/p&gt;

&lt;p&gt;Além disso, o Raindrop também permite importar bookmarks de outros serviços de bookmarking, como o Pocket e o Delicious, o que é muito útil para quem já tem uma grande quantidade de referências salvas em outros serviços.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como o Raindrop pode melhorar seu fluxo de trabalho
&lt;/h2&gt;

&lt;p&gt;Com o Raindrop, é possível organizar todas as suas referências e bookmarks em um único lugar, o que facilita muito a busca e o acesso rápido às informações salvas. Além disso, a ferramenta também permite compartilhar as referências salvas com outras pessoas, o que é útil para quem trabalha em equipe ou precisa compartilhar referências com outras pessoas.&lt;/p&gt;

&lt;p&gt;Outra funcionalidade interessante do Raindrop é a possibilidade de salvar referências com tags, o que permite categorizar as referências de acordo com assunto, tema ou qualquer outra categoria que você queira. Com isso, é possível realizar buscas específicas por tags e encontrar rapidamente as referências relacionadas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O Raindrop é uma ferramenta muito útil para quem trabalha com muitas referências e precisa organizar tudo de forma eficiente. Com ele, é possível salvar links, imagens e vídeos de forma organizada em uma única plataforma, categorizar as referências por assunto, tags ou pastas, importar bookmarks de outros serviços de bookmarking e compartilhar referências com outras pessoas. Tudo isso ajuda a melhorar o fluxo de trabalho e aumentar a produtividade. Experimente o Raindrop e veja como ele pode facilitar o seu dia a dia!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>SaaS - Entenda o significado do termo e sua importância para o mundo do software</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Wed, 24 May 2023 00:53:12 +0000</pubDate>
      <link>https://forem.com/marlonfrade/saas-entenda-o-significado-do-termo-e-sua-importancia-para-o-mundo-do-software-5hj1</link>
      <guid>https://forem.com/marlonfrade/saas-entenda-o-significado-do-termo-e-sua-importancia-para-o-mundo-do-software-5hj1</guid>
      <description>&lt;p&gt;Nos últimos anos, o termo SaaS tem se tornado cada vez mais comum no mundo da programação. Mas você sabe o que é SaaS e qual a sua importância?&lt;/p&gt;

&lt;p&gt;SaaS é a sigla para Software as a Service, ou Software como Serviço em português. Esse modelo de computação em nuvem permite que um software seja oferecido como serviço para os usuários finais. Em vez de comprar uma licença de uso, o usuário paga por um acesso ao serviço, que pode ser utilizado por meio de uma conexão com a internet.&lt;/p&gt;

&lt;p&gt;Antes do surgimento do SaaS, era comum comprar softwares em caixas e instalá-los em servidores próprios, o que gerava custos significativos para as empresas e limitava a utilização do software. Com o SaaS, a infraestrutura necessária para rodar o software fica a cargo do provedor do serviço, o que reduz significativamente os custos para o usuário final.&lt;/p&gt;

&lt;p&gt;Além disso, o uso do SaaS permite que o usuário tenha acesso a atualizações e novas funcionalidades do software de forma mais rápida e eficiente. Como o provedor do serviço é responsável pela infraestrutura, ele pode facilmente implementar novas funcionalidades e atualizações, sem que o usuário precise se preocupar em atualizar seus servidores e sistemas.&lt;/p&gt;

&lt;p&gt;Outra grande vantagem do SaaS é a possibilidade de acessar o software de qualquer lugar e dispositivo, desde que se tenha uma conexão com a internet. Isso traz uma maior mobilidade e flexibilidade para os usuários, que podem trabalhar de qualquer lugar e não ficam limitados a um único dispositivo.&lt;/p&gt;

&lt;p&gt;O SaaS é uma das modalidades de computação em nuvem mais utilizadas pelos usuários finais e pode ser encontrado em serviços como e-mail, armazenamento de arquivos e softwares de produtividade, como o Office 365. O modelo SaaS também mudou o mercado de vendas de software, com empresas como a SAP e a Microsoft adotando cada vez mais esse modelo de comercialização.&lt;/p&gt;

&lt;p&gt;Para os desenvolvedores, o surgimento do SaaS trouxe novos desafios, já que agora é necessário pensar na infraestrutura necessária para rodar o software e em como oferecer o serviço de forma eficiente e escalável. No entanto, o modelo SaaS também oferece novas oportunidades, como a possibilidade de desenvolver softwares para serem utilizados como serviço, o que pode gerar uma nova fonte de receita para as empresas de software.&lt;/p&gt;

&lt;p&gt;Em resumo, o SaaS é uma modalidade de computação em nuvem que permite que um software seja oferecido como serviço para os usuários finais. Ele traz uma série de vantagens, como a redução de custos, a facilidade de acesso e a possibilidade de atualizações e novas funcionalidades. Para os desenvolvedores, o SaaS representa novos desafios e oportunidades, e é uma tendência cada vez mais forte no mundo do software.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>sass</category>
    </item>
    <item>
      <title>Guia para usar o Terminal como uma IDE com Neovim e AstroNvim</title>
      <dc:creator>Marlon Frade</dc:creator>
      <pubDate>Thu, 04 May 2023 11:42:19 +0000</pubDate>
      <link>https://forem.com/marlonfrade/guia-para-usar-o-terminal-como-uma-ide-com-neovim-e-astronvim-2bkb</link>
      <guid>https://forem.com/marlonfrade/guia-para-usar-o-terminal-como-uma-ide-com-neovim-e-astronvim-2bkb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Você já se perguntou se poderia usar o terminal como uma IDE? Isso pode parecer estranho para alguns, mas é totalmente possível com o uso do Neovim e do AstroNvim. Este guia vai te ajudar a transformar o seu terminal em uma ferramenta de desenvolvimento poderosa.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  O que é Neovim e AstroNvim?
&lt;/h2&gt;

&lt;p&gt;Neovim é um fork do Vim que foi desenvolvido para melhorar a performance, estabilidade e extensibilidade do editor de texto. Ele é compatível com a maioria dos plugins do Vim e oferece suporte a várias linguagens de programação.&lt;/p&gt;

&lt;p&gt;AstroNvim é uma pré-configuração para o Neovim que inclui uma série de recursos essenciais para desenvolvedores, como destaque de sintaxe, diagnósticos de linguagem, formatação, linting, integração com o Git e um explorador de arquivos. Além disso, é altamente personalizável, permitindo que você configure o editor da maneira que mais lhe convier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuração
&lt;/h2&gt;

&lt;p&gt;Antes de começar a usar o Neovim e o AstroNvim, você precisa instalá-los. Para isso, é necessário ter o pacote &lt;code&gt;neovim&lt;/code&gt; instalado em seu sistema operacional. Em seguida, você pode instalar o AstroNvim.&lt;/p&gt;

&lt;p&gt;AstroNvim é uma configuração que adiciona recursos essenciais ao Neovim, permitindo que você use o Terminal como uma IDE. Ele inclui destaque de sintaxe, diagnósticos de idioma, formatação, linting, integração Git e um explorador de arquivos, tornando-o uma opção moderna e altamente personalizável para a edição de código.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalação e Configuração
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Instalação
&lt;/h3&gt;

&lt;p&gt;Para começar, você precisará ter o Neovim instalado no seu sistema. Depois de instalá-lo, você pode clonar o repositório AstroNvim do GitHub com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/LunarVim/LunarVim.git ~/.config/nvim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso criará uma pasta chamada &lt;code&gt;nvim&lt;/code&gt; em seu diretório de configuração e configurará o Neovim para usar o AstroNvim.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuração
&lt;/h3&gt;

&lt;p&gt;Primeiro, inicie o seu neovim com o comando &lt;code&gt;nvim&lt;/code&gt; e deixe que o Lazy faça o download de todas as dependências do Astro. Assim que finalizado, você pode sair usando o tecla &lt;code&gt;q&lt;/code&gt; . &lt;/p&gt;

&lt;p&gt;Para configurar seu vim, utilize o &lt;a href="https://github.com/AstroNvim/user_example" rel="noopener noreferrer"&gt;repositório user_example&lt;/a&gt; como template para criar seu repositório de configuração.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2o0gy4quf03vbfhz677y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2o0gy4quf03vbfhz677y.png" alt="Image description" width="502" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após criar o seu repositório, clone ele para suas configurações utilizando o comando como no exemplo abaixo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lembre-se de substituir o User e username pelo seu repositório específico.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:User/username_config.git ~/.config/nvim/lua/user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora navegue até o diretório clonado para iniciarmos as configurações e primeiras navegações do seu AstroNvim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.config/nvim/lua/user
nvim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;O lazy irá carregar novamente, aguarde finalizar e feche com a tecla &lt;code&gt;q&lt;/code&gt; por enquanto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Uso do AstroNvim
&lt;/h2&gt;

&lt;p&gt;O AstroNvim vem com uma série de plugins pré-instalados que adicionam recursos adicionais ao Neovim. Alguns dos plugins incluídos são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  nvim-lspconfig&lt;/li&gt;
&lt;li&gt;  nvim-treesitter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alguns recursos úteis incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;:LspInstall&lt;/code&gt;: instala servidores de linguagem para oferecer recursos mais avançados, como auto-completar, refatoração e documentação.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;:LspInfo&lt;/code&gt;: mostra informações sobre o servidor de linguagem atual.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;:Git&lt;/code&gt;: abre a interface do Git para realizar ações como adicionar, commitar e pushar alterações.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Astro segue uma convenção de tecla de atalho, em que a maioria das ações são acionadas pressionando a tecla &lt;code&gt;espaço&lt;/code&gt;, seguida de outra tecla. Por exemplo, é possível pressionar &lt;code&gt;espaço&lt;/code&gt; seguido de &lt;code&gt;e&lt;/code&gt; para abrir o explorador de arquivos. Dentro do neo-tree, é possível navegar usando as teclas &lt;code&gt;hjkl&lt;/code&gt;. Para abrir diretórios, é possível usar a tecla &lt;code&gt;l&lt;/code&gt;, e para fechá-los, a tecla &lt;code&gt;h&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para maiores configurações, você pode acessar a &lt;a href="https://astronvim.com/Recipes/advanced_lsp" rel="noopener noreferrer"&gt;documentação LSP&lt;/a&gt; Contendo um tutorial mais completo a respeito do astroNvim e das configurações acessando cada arquivo. Além da &lt;a href="https://astronvim.com/Recipes/dap" rel="noopener noreferrer"&gt;documentação Debugger&lt;/a&gt;. Por hora, iremos configurar apenas o padrão.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comandos Para o AstroNvim
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Comando simples
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;Descrição&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Space&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Esta é a tecla líder no AstroVim. É usada para acionar a maioria das ações no AstroVim.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Space + e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Isto abre o explorador de arquivos no AstroVim.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hjkl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Estas teclas são usadas para navegar dentro do explorador de arquivos NeoTree.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;l&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Esta tecla é usada para abrir um diretório no NeoTree.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Esta tecla é usada para fechar um diretório no NeoTree.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Space + o&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Isto retorna o foco para o NeoTree.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Isto é usado para salvar as alterações em um arquivo.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Isto é usado para sair do AstroVim.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Space + n&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cria um novo arquivo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Space + h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Abre a tela inicial do AstroNvim&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Estrutura de Arquivos de Configuração
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── highlights
│   ├── duskfox.lua
│   └── init.lua
├── init.lua
├── mappings.lua
├── options.lua
└── plugins
    ├── community.lua
    ├── core.lua
    ├── mason.lua
    ├── null-ls.lua
    ├── treesitter.lua
    └── user.lua
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Init.lua
&lt;/h3&gt;

&lt;p&gt;O Astro utiliza a linguagem Lua, uma linguagem simples de script para configuração. O seu arquivo &lt;code&gt;init.lua&lt;/code&gt; contém algumas configurações importantes como &lt;code&gt;updater&lt;/code&gt; , &lt;code&gt;colorscheme&lt;/code&gt; , &lt;code&gt;formatting&lt;/code&gt; dentro da configuração &lt;code&gt;LSP&lt;/code&gt; , e uma função &lt;code&gt;polish&lt;/code&gt; que pode rodar qualquer código no final da inicialização.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mappings.lua
&lt;/h3&gt;

&lt;p&gt;Dentro do arquivo &lt;code&gt;mappings.lua&lt;/code&gt; podemos mapear nossas teclas, usando configurações separadas por modo. No arquivo &lt;code&gt;mappings.lua&lt;/code&gt;, temos a letra "N" como "Normal Mode", "T" para terminal, "I" para o "Insert Mode" e "V" para o "Visual Mode". Caso queira criar algum atalho utilizando a Tecla &lt;code&gt;Espaço&lt;/code&gt;, você poderia adicionar um novo comando dentro do modo "N" como no exemplo abaixo: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2m5zsu4fy11aixsee3z6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2m5zsu4fy11aixsee3z6.png" alt="Image description" width="800" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O comando é um exemplo de como printar "Hello World" usando apenas os atalhos &lt;code&gt;Espaço + Tecla a&lt;/code&gt; .&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Para executar um comando, lembre-se de finalizar utilizando o comando &lt;code&gt;cr&lt;/code&gt; que funciona como "Carriage Return" para a tecla Enter.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Pasta Plugins
&lt;/h3&gt;

&lt;p&gt;Para configurar plugins no AstroNvim, você pode editar os arquivos dentro da pasta &lt;code&gt;plugins&lt;/code&gt;. Para melhor compreensão segue as especificações de alguns arquivos importantes e suas respectivas configurações.&lt;/p&gt;

&lt;h4&gt;
  
  
  Treesitter.lua
&lt;/h4&gt;

&lt;p&gt;Um arquivo que retorna uma configuração para o treesitter, que é um "Code Highlighter" que auxilia na visualização do código. Para utilizá-lo, você precisa adicionar os Languages Parsers, ou dentro da chave "OPTS" (utilizando o ensure_installed) ou utilizando o comando :TSInstall&lt;/p&gt;

&lt;h4&gt;
  
  
  Mason.lua
&lt;/h4&gt;

&lt;p&gt;Um arquivo que contém configurações sobre múltiplos plugins que podem ser baixados e configurados para utilizar, como Language Servers, Linters, Formatters e Debuggers. Por hora, mantenha o arquivo na seguinte configuração: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Você pode encontrar um &lt;code&gt;Package List&lt;/code&gt; do Mason &lt;a href="https://mason-registry.dev/registry/list" rel="noopener noreferrer"&gt;nesse link&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy83l5h76db5ss3v5wz0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy83l5h76db5ss3v5wz0f.png" alt="Image description" width="800" height="911"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  User.lua
&lt;/h4&gt;

&lt;p&gt;Neste arquivos adicionaremos configurações de plugins que adicionamos fora do AstroNvim. Para isso utilizaremos um exemplo do &lt;a href="https://github.com/folke/todo-comments.nvim" rel="noopener noreferrer"&gt;repositório TODO comments&lt;/a&gt; , certifique de possuir todos os requerimentos para instalação do pacote, como uma &lt;a href="https://www.nerdfonts.com/" rel="noopener noreferrer"&gt;patched font&lt;/a&gt; e o &lt;a href="https://github.com/BurntSushi/ripgrep" rel="noopener noreferrer"&gt;ripgrep&lt;/a&gt; por exemplo. Utilizando a configuração padrão de acordo com o repositório temos o arquivo da seguinte maneira:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97qto0troo7c3ao8j8u9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97qto0troo7c3ao8j8u9.png" alt="Image description" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para configurar mais a fundo nossos plugins instalados, precisamos entender melhor como funciona o gerenciador LAZY.&lt;/p&gt;

&lt;h4&gt;
  
  
  Lazy Events
&lt;/h4&gt;

&lt;p&gt;O gerenciador de plugins Lazy do AstroVim é configurado para carregar plugins de forma preguiçosa (lazy) por padrão, com o objetivo de melhorar a performance. O termo "Lazy" faz referência à preguiça em carregar todos os plugins de uma vez só. É possível especificar eventos, comandos ou atalhos que carregam o plugin. Caso deseje desativar o carregamento preguiçoso, basta definir a chave "lazy" como false. Neste caso, para carregar o plugin quando um arquivo é aberto, utilize o evento "User AstroFile". Existem outros eventos comuns que podem ser utilizados para carregar plugins, sendo o evento "VeryLazy" útil para carregar plugins na inicialização. Depois de reiniciar, é possível observar o Lazy instalando o novo plugin.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Evento&lt;/th&gt;
&lt;th&gt;Quando é acionado&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;User AstroFile&lt;/td&gt;
&lt;td&gt;Acionado quando um arquivo é aberto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VeryLazy&lt;/td&gt;
&lt;td&gt;Acionado assim que o Neovim é iniciado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BufEnter * .lua&lt;/td&gt;
&lt;td&gt;Acionado ao abrir um arquivo Lua&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;InsertEnter&lt;/td&gt;
&lt;td&gt;Acionado ao iniciar o Insert Mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LspAttach&lt;/td&gt;
&lt;td&gt;Acionado depois de iniciar os LSPs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sendo que os eventos podem ser um ou mútiplos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"User AstroFile"&lt;/span&gt;
&lt;span class="n"&gt;ou&lt;/span&gt;
&lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"InsertEnter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"User AstroFile"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora que já entendemos como funciona o gerenciador Lazy, podemos continuar configurando nosso plugin TODO. Para isso, temos o arquivo &lt;code&gt;user.lua&lt;/code&gt; editado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkx6kzelmivouwno2621g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkx6kzelmivouwno2621g.png" alt="Image description" width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A chave &lt;code&gt;event&lt;/code&gt; está relacionado ao formato de carregamento do Lazy. Como definimos para o evento somente carregar o Plugin quando o arquivo estiver aberto, podemos usar a chave &lt;code&gt;cmd&lt;/code&gt;, para configurar algum comando que desejamos realizar fora do AstroNvim. As keys funcionam da mesma maneira que no arquivo &lt;code&gt;mappings.lua&lt;/code&gt;, podendo ser adaptadas para um atalho novo, como no exemplo que usei as teclas &lt;code&gt;Espaço + T (maiúsculo)&lt;/code&gt; para que funcione como o comando que abre o Telescope para visualizar meus TODOs.&lt;/p&gt;

&lt;h2&gt;
  
  
  AstroNvim Community
&lt;/h2&gt;

&lt;p&gt;Uma das features que o AstroNvim entrega é a sua comunidade de plugins, contendo configurações simplificadas para instalar plugins dentro do AstroNvim.&lt;/p&gt;

&lt;p&gt;Caso você deseje dar uma olhada nos plugins criados ou feitos pela comunidade. Você pode acessar &lt;a href="https://github.com/AstroNvim/astrocommunity" rel="noopener noreferrer"&gt;o repositório da comunidade AstroNvim&lt;/a&gt;. A comunidade facilita a instalação dos plugins, permitindo ao usuário que adicione plugins para gestão de projetos, colorscheme para personalização da IDE, e languages packs com apenas uma linha de comando, como no exemplo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiu8k4etksirbcuvmgwj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiu8k4etksirbcuvmgwj.png" alt="Image description" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features do AstroNvim
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Which-Key
&lt;/h3&gt;

&lt;p&gt;Ao pressionar uma tecla de comando como o &lt;code&gt;espaço&lt;/code&gt;, um popup de opções irá aparecer no painel da IDE para autocompletar o seu comando, ou seja, o AstroNvim sempre lhe dará sugestões de comando ao pressionar uma tecla gatilho. Os sub-menus com mais opções estará destacado de azul&lt;/p&gt;

&lt;h3&gt;
  
  
  Telescope
&lt;/h3&gt;

&lt;p&gt;Para abrir o telescope, temos com o exemplo o comando &lt;code&gt;space + ff&lt;/code&gt; e o &lt;code&gt;space+fo&lt;/code&gt;, ao entrar em algum desses modos, por padrão você estará no modo de Inserção. para buscar, comece a digitar, e use os atalhos &lt;code&gt;ctrl+j&lt;/code&gt; e &lt;code&gt;ctrl+k&lt;/code&gt; para navegar nos arquivos. Do lado direito, onde aprece uma pré do arquivo, você pode utilizar os comandos &lt;code&gt;ctrl+d&lt;/code&gt; e &lt;code&gt;ctrl+u&lt;/code&gt; para navegar para cima e para baixo nos arquivos visualizados. Ao clicar em &lt;code&gt;esc&lt;/code&gt; você sai do modo de Inserção e volta ao modo normal, permitindo que navegue no campo de busca utilizando os comandos &lt;code&gt;hl&lt;/code&gt; para navegar na caixa de pesquisa e os comando &lt;code&gt;jk&lt;/code&gt; para navegar nos arquivos buscados. Use o comando &lt;code&gt;?&lt;/code&gt; para abrir um popup de opções de comandos. Use os comandos &lt;code&gt;ctrl+p&lt;/code&gt; e &lt;code&gt;ctrl+n&lt;/code&gt; para retornar e avançar nas últimas buscas feitas. use os comandos &lt;code&gt;espaço+fw&lt;/code&gt; e &lt;code&gt;espaço+fc&lt;/code&gt;, para procurar palavras específicas e para procurar por palavras semelhantes a que está no seu cursor. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Um outro atalho importante não mencionado aqui, é o &lt;code&gt;space+/&lt;/code&gt; que comenta as linhas selecionadas ou a linha atual que está digitando.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Buffers
&lt;/h3&gt;

&lt;p&gt;Para criar um novo buffer, utilize o &lt;code&gt;space+n&lt;/code&gt;  e para fechar, utilize o &lt;code&gt;space+c&lt;/code&gt;, para navegar entre as abas, utilize o comando &lt;code&gt;[+b&lt;/code&gt; e &lt;code&gt;]+b&lt;/code&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  NeoTree
&lt;/h3&gt;

&lt;p&gt;Para abrir o gerenciador de arquivos, utilize o comando &lt;code&gt;space+e&lt;/code&gt;  e para visualizar os demais comandos, utilize o &lt;code&gt;?&lt;/code&gt;. Alguns comandos úteis incluem o &lt;code&gt;space+H&lt;/code&gt; para mostrar e esconder arquivos escondidos como &lt;code&gt;.git&lt;/code&gt; por exemplo. A tecla &lt;code&gt;a&lt;/code&gt; permite que você crie arquivos ou diretórios, enquanto que as teclas &lt;code&gt;r&lt;/code&gt; e &lt;code&gt;d&lt;/code&gt; permitem que você delete os arquivos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Splits
&lt;/h3&gt;

&lt;p&gt;O comando &lt;code&gt;space+o&lt;/code&gt; muda o foco entre o neotree e os buffers, utilize o comandos &lt;code&gt;ctrl+l&lt;/code&gt; e &lt;code&gt;ctrl+h&lt;/code&gt; para navegar entre buffer e neotree também. Utilize o comando &lt;code&gt;space+\&lt;/code&gt; para dividir o buffer horizontalmente. Utilize o comando &lt;code&gt;ctrl+|&lt;/code&gt; para dividir verticalmente, e o &lt;code&gt;ctrl&lt;/code&gt; seguido das teclas de navegação &lt;code&gt;hjkl&lt;/code&gt; permitem que você navegue entre as "split buffers". Para redimensionar utilize o &lt;code&gt;ctrl&lt;/code&gt; seguido da teclas com seta de navegação (Arrow Keys) e para fechar use o comando &lt;code&gt;ctrl+q&lt;/code&gt;, utilizando as teclas &lt;code&gt;&amp;lt; ou &amp;gt;&lt;/code&gt; seguido da tecla &lt;code&gt;b&lt;/code&gt; você move o seu buffer para esquerda ou direita, respectivamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Git Integration
&lt;/h3&gt;

&lt;p&gt;Utilize o comando &lt;code&gt;espaço + g&lt;/code&gt; para ver as opções possíveis de integração entre o AstroNvim e o Git.&lt;/p&gt;

&lt;h3&gt;
  
  
  Language Support
&lt;/h3&gt;

&lt;p&gt;O AstroNvim pode auxiliar no suporte a linguagem, alguns dos atalhos mais úteis estão nessa tabela de exemplo:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Descrição&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl+espaço&lt;/td&gt;
&lt;td&gt;Completar código automaticamente durante a digitação&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl+e&lt;/td&gt;
&lt;td&gt;Fechar a janela de completar código&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K&lt;/td&gt;
&lt;td&gt;Mostrar uma prévia do tipo do símbolo sob o cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gT&lt;/td&gt;
&lt;td&gt;Ir para a definição de tipo de um símbolo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl+o&lt;/td&gt;
&lt;td&gt;Voltar da definição de tipo de um símbolo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gI&lt;/td&gt;
&lt;td&gt;Ir para a implementação de um símbolo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gd&lt;/td&gt;
&lt;td&gt;Ir para a definição de um símbolo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gr&lt;/td&gt;
&lt;td&gt;Mostrar referências de um símbolo em todo o projeto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gl&lt;/td&gt;
&lt;td&gt;Ver a mensagem completa de erro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gl(gl novamente)&lt;/td&gt;
&lt;td&gt;Ir para dentro da janela pop-up da mensagem de erro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;q&lt;/td&gt;
&lt;td&gt;Fechar a janela pop-up da mensagem de erro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ir para o erro anterior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;]&lt;/td&gt;
&lt;td&gt;Ir para o próximo erro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;leader l D&lt;/td&gt;
&lt;td&gt;Ver todas as mensagens de diagnóstico no buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;leader l r&lt;/td&gt;
&lt;td&gt;Renomear símbolos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;leader l f&lt;/td&gt;
&lt;td&gt;Formatar o buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;leader l a&lt;/td&gt;
&lt;td&gt;Exibir ações de código e aplicá-las&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enter&lt;/td&gt;
&lt;td&gt;Aplicar ação de código selecionada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F7&lt;/td&gt;
&lt;td&gt;Alternar terminal flutuante&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jj or jk&lt;/td&gt;
&lt;td&gt;Substituir o pressionamento da tecla Esc na inserção de texto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl+clique em um símbolo&lt;/td&gt;
&lt;td&gt;Ir para a definição de um símbolo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clicar nas migalhas&lt;/td&gt;
&lt;td&gt;Ir para uma parte específica do código&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mouse&lt;/td&gt;
&lt;td&gt;Usar o mouse para selecionar, focar, mudar e fechar buffers, abrir arquivos, selecionar guias, mudar branches git e ver informações detalhadas de LSP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alt&lt;/td&gt;
&lt;td&gt;Selecionar um bloco de texto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;leader Shift+s, s&lt;/td&gt;
&lt;td&gt;Salvar sessão&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;leader Shift+s, .&lt;/td&gt;
&lt;td&gt;Carregar sessão&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O AstroNvim é uma ótima opção para quem deseja usar o Terminal como uma IDE. Com suas configurações pré-configuradas e plugins, você pode melhorar significativamente sua eficiência e produtividade na edição de código. Com o suporte a servidores de idiomas e o gerenciador de plugins Lazy, você pode personalizar sua experiência de edição de acordo com suas necessidades específicas. Espero que este guia o ajude a começar a usar o AstroNvim em seu projeto! Usando o AstroNvim, podemos transformar nosso terminal em uma poderosa IDE para programação. Com recursos avançados de edição de texto, integração com Git e servidores de linguagem, o AstroNvim pode ajudar a melhorar a eficiência e produtividade do nosso fluxo de desenvolvimento. Ao seguir as etapas descritas neste guia, podemos instalar e configurar facilmente o AstroNvim em nosso terminal e começar a escrever código com mais facilidade.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>vim</category>
    </item>
  </channel>
</rss>
