• Home

    Escolha seu Plano

    Carreiras Alura

    Evolua com profundidade técnica, direção clara e aplicação prática.

    Jornadas guiadas do básico ao avançado com checkpoints práticos, desenhadas para quem busca profundidade e protagonismo técnico.

    Iniciante

    Comece do zero com uma trilha clara e progressiva.

    Fundamentos práticos para dar os primeiros passos com segurança e construir uma base sólida.

    Intermediário

    Continue sua evolução com cursos que conectam fundamentos, ferramentas e prática profissional. Ganhe autonomia, e avance para projetos mais completos.

    Avançado

    Aprofunde temas técnicos e estratégicos para enfrentar desafios mais complexos. Explore boas práticas, arquitetura, performance com visão profissional.

    Cursos

    Ver mais cursos de Back-end
    • Pensamento computacional: fundamentos da computação e lógica de programação
    • Lógica de programação: mergulhe em programação com JavaScript
    • DDD: fundamentos do design orientado a domínio
    • ASP.NET: autenticação e autorização em APIs e aplicações web
    • Microsserviços: migração de monólitos e modularização

    Cursos

    Ver mais cursos de Dados
    • Python para Dados: primeiros passos
    • Excel: domine o editor de planilhas
    • Engenharia de Dados: Orquestração de Pipelines com Apache Airflow
    • Power BI Desktop: construindo meu primeiro dashboard
    • Governança e Arquitetura de Dados

    Cursos

    Ver mais cursos de Inteligência Artificial
    • IA: Explorando o Potencial da Inteligência Artificial Generativa
    • Engenharia de Prompt: Criando Prompts Eficazes para IA Generativa
    • Claude para Análise de Dados: prompts, integrações e automações
    • Agno: criando agentes e sistemas multiagente
    • Engenharia de software na era da IA: segurança de aplicações com agentes, MCPs e código gerado por IA

    Cursos

    Ver mais cursos de Front-end
    • HTML e CSS: ambiente, estrutura e estilo
    • React: realizando testes avançados com Jest e Testing Library
    • React: integrando TypeScript em projetos
    • JavaScript: aprendendo a programar
    • React: aplicando arquiteturas de Micro frontends

    Cursos

    Ver mais cursos de DevOps
    • Sistema Operacional Linux: fundamentos e administração prática
    • Containers e Docker: empacotamento, isolamento e gestão
    • Redes: dos conceitos iniciais à criação de uma intranet
    • Linux: gerenciando diretórios, arquivos, permissões e processos
    • Cibersegurança: Fundamentos e práticas integradas

    Cursos

    Ver mais cursos de UX & Design
    • UX Research: mapeando a experiência da pessoa usuária
    • UX/UI Design: Entregando produtos digitais com IA
    • UI Design: Prototipação e animações interativas
    • Figma: Conhecendo o programa
    • Product Design: métricas e ciclo de vida do produto

    Cursos

    Ver mais cursos de Gestão & Negócios
    • Canva: Criação de landing pages e e-mail marketing
    • Agilidade: como ela pode ajudar a criar um time de alta performance
    • Google Analytics 4: Extrair insights e configurar eventos
    • Management 3.0: gerencie o ambiente, não as pessoas
    • Automação de processos com n8n: Inteligência de dados para Marketing

    Cursos

    Ver mais cursos de Mobile
    • React Native: Estilização e Layouts com Flexbox e StyleSheet
    • Flutter: Graphql e suporte offline
    • Android com Gemini: Trabalhando com textos e imagens na IA
    • Dart: trabalhando com orientação a objetos
    • React Native: Dominando Listas com FlatList e ScrollView

    Carreiras

    Ver mais carreiras
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA

    Cursos

    • Engenharia de Prompt: Prompts Eficazes para IA Generativa
    • Claude Code: Criando sua Primeira Aplicação
    • Python: Crie sua Primeira Aplicação
    • Git e GitHub: Compartilhando e Colaborando
    • N8N: Fluxos de Trabalho Avançados

    Cursos

    • Copilot Studio: Solução Multiagentes
    • Padrões de API HTTP e Modelagem de APIs
    • Python para Análise de Dados com SQL
    • Docker: Criando e Gerenciando Containers
    • Design com IA: Otimizando o Processo Criativo

    Cursos

    • Model Context Protocol (MCP)
    • Spec-Driven Development: Dev Assistido por Agentes
    • Arquitetura de Sistemas Distribuídos com Java
    • Governança de Modelos e Reprodutibilidade
    • Pentest: Vulnerabilidades em Aplicações Web

    Escolha seu Plano

    Skills & Go

    O Skills & Go é para Tech Leads, Product Managers, estrategistas e early adopters que transformam ideias em soluções de alto impacto. Em cursos ao vivo e 100% online, você domina a nova era da IA em tempo real.

    Aulas ao vivo

    Saiba mais
    • Agentic Engineering: orquestre múltiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA

    Escolha seu Plano

    Eventos Alura

    Nossos eventos são pensados para quem quer estar à frente das mudanças em tecnologia, IA e inovação. Em experiências presenciais, você acompanha tendências e se conecta com especialistas que estão moldando o futuro.

    Próximos eventos

    • Imersão Engenharia de Software: Dev na Era da IA
    • IA Conference
    • Alura Signals
  • Talent Lab
  • IA

    Escolha seu Plano

    Conteúdos gratuitos

    Explore conteúdos gratuitos para aprender tecnologia no seu ritmo. Encontre artigos com conteúdos técnicos para aprender na prática, notícias para acompanhar as principais tendências do mercado e o Alura Labs, com análises e reflexões de especialistas sobre tecnologia, IA e carreira.

    Conteúdos gratuitos

    • Artigos
    • Notícias
    • Alura Labs
  • Para Empresas
Ver planos
Links principais
  • Planos e Promoções
  • Links complementares do menu mobile
  • Talent lab
  • Inteligência Artificial
  • Pós Graduações
  • Para Empresas
  • Sobre a Alura
  • Grupo Alun
  • Entrar
    • Home
    • Carreiras
    • Skills & Go
    • Talent Lab
    • Inteligência Artificial
    • Pós Graduações
    • Artigos
    • Sobre a Alura
    • Grupo Alun
    LoginContato
    • LinkedIn
    • Instagram
    • YouTube
    1. Página inicial
    2. Front-end
    3. TSLint e ESLint: configuração e uso em projetos TypeScript

    TSLint e ESLint: configuração e uso em projetos TypeScript

    11 min11 minutos de leitura

    11 min11 minutos de leitura

    Publicado: 30/10/2023

    1. Introdução
    2. TSLint e ESLint
    3. Conclusão

    Introdução

    Chegou a hora de dar mais um passo na sua jornada de aprendizado do TypeScript, uma linguagem de programação que adiciona tipagem estática e outros recursos ao JavaScript!

    Imagine que você está em uma equipe de pessoas desenvolvedoras de um projeto que utiliza essa linguagem, como seria possível garantir a qualidade e consistência do código? Uma resposta é utilizar ferramentas de linting, que são capazes de analisar o código e identificar possíveis erros, más práticas ou violações de estilo.

    Linting é o processo de aplicar regras a um código-base e identificar padrões ou códigos problemáticos que não aderem a determinadas diretrizes de estilo. O linting moderno de JavaScript também inclui a correção automática de problemas. Entre as ferramentas de linting mais populares para TypeScript estão o TSLint e o ESLint. Ambas permitem configurar regras personalizadas ou seguir padrões pré-definidos. Mas qual delas é melhor? Quais são as vantagens e desvantagens de cada uma? Como configurá-las e usá-las? Essas são as perguntas que este artigo pretende responder.

    Banner do Guia Tático Alura sobre carreira em tecnologia, destacando o mapa da carreira tech. A imagem convida a explorar diferentes caminhos profissionais, comparar possibilidades e encontrar a próxima fase da carreira na área de tecnologia, com chamada “Explore o mapa”.

    TSLint e ESLint

    O TSLint é uma ferramenta de linting específica para TypeScript, que foi desenvolvida pela Palantir Technologies em 2015. Ela oferece uma boa integração com editores de código, como o Visual Studio Code, e suporta recursos exclusivos do TypeScript, como program-wide linting e semantic linting.

    No entanto, em 2019, os desenvolvedores do TSLint anunciaram que a ferramenta seria descontinuada em favor do ESLint, que é uma ferramenta de linting mais genérica para JavaScript, mas que também pode ser usada com TypeScript através de plugins e parsers. Segundo eles, o motivo da decisão foi a dificuldade de manter o TSLint atualizado com as novas versões do TypeScript e a preferência da comunidade pelo ESLint.

    Já ESLint é uma ferramenta de linting, criada em 2013 por Nicholas C. Zakas, que permite definir regras flexíveis e extensíveis para JavaScript e outras linguagens que se compilam para JavaScript, como TypeScript. Ela tem uma grande variedade de plugins e configurações disponíveis, além de ser mais performática e modular que o TSLint. No entanto, para usar o ESLint com TypeScript, é preciso instalar alguns pacotes adicionais.

    Vantagens e desvantagens

    Uma das vantagens do TSLint é que ele é uma ferramenta específica para TypeScript, que oferece uma boa integração e suporte a recursos exclusivos. Ele ainda funciona perfeitamente, mesmo sendo descontinuado. Ele também pode ser útil para alguns projetos que já estejam acostumados com ele ou que precisem de funcionalidades específicas do TypeScript.

    Apesar disso, está obsoleto desde 2019, não recebendo mais atualizações ou correções de bugs, podendo ficar incompatível com as novas versões do TypeScript ou com os padrões da comunidade. Ele também tem uma menor variedade e flexibilidade de regras e plugins, que podem ser limitados ou desatualizados.

    Apesar de estar descontinuado, o TSLint ainda pode ser utilizado em alguns casos, como:

    • Quando o projeto já está consolidado com o TSLint e não há tempo ou recursos para migrar para o ESLint;
    • Quando o projeto precisa de funcionalidades específicas do TypeScript que não são suportadas ou são diferentes no ESLint;
    • Quando o projeto tem uma preferência pessoal ou da equipe pelo TSLint.

    No entanto, esses casos são cada vez mais raros, e a tendência é que o ESLint se torne a ferramenta padrão para linting de TypeScript.

    Agora, vamos analisar as vantagens do ESLint! =)

    Ele é mais moderno, performático e versátil que o TSLint. Ele tem uma maior variedade e flexibilidade de regras e plugins, que podem ser adaptados às necessidades de cada projeto e estilo de codificação. Também é a ferramenta oficial de linting para TypeScript, sendo mantido pela equipe do TypeScript e pelo antigo time do TSLint.

    No entanto, o ESLint requer a instalação de alguns pacotes adicionais para funcionar com TypeScript, o que pode aumentar a complexidade da configuração. Pode não suportar ou ter comportamento diferente em algumas funcionalidades do TSLint, como o program-wide linting ou semantic linting, como também pode exigir algumas adaptações ou configurações extras para migrar entre as ferramentas.

    Sabendo sobre esses fatores, como escolher qual usar?

    A escolha sobre qual usar depende de alguns fatores, como a complexidade do projeto, as preferências pessoais ou da equipe, e a facilidade de migração. De modo geral, o ESLint parece ser a opção mais recomendada atualmente, por ser mais moderno, performático e versátil que o TSLint. Entretanto, isso não significa que o TSLint seja uma ferramenta ruim, pois ele ainda pode atender bem alguns projetos que já estejam acostumados com ele ou que precisem de funcionalidades específicas do TypeScript.

    E agora que você já sabe quais as vantagens e desvantagens de cada um deles, vamos mostrar exemplos de como configurar essas ferramentas no nosso projeto.

    Vamos lá?

    Configurando e usando o TSLint

    Para configurar o TSLint em um projeto TypeScript, é preciso instalar os seguintes pacotes via npm:

    npm install --save-dev tslint typescript
    

    O comando npm install é um comando do Node Package Manager (npm) usado para instalar pacotes e dependências em um projeto. Ao usar --save-dev estamos indicando que os pacotes a serem instalados são dependências de desenvolvimento. Isso significa que esses pacotes não são necessários para a execução da aplicação em produção, mas são necessários para o desenvolvimento, testes, compilação, ou outras tarefas relacionadas ao desenvolvimento. Os pacotes que estão sendo instalados são o tslint e o typescript.

    Em seguida, é preciso criar um arquivo chamado “tslint.json” na raiz do projeto, que irá conter as regras de linting a serem seguidas. Um exemplo simples de configuração é o seguinte:

    {
      "defaultSeverity": "error",
      "extends": [
        "tslint:recommended"
      ],
      "rules": {
        "quotemark": [true, "single"],
        "semicolon": [true, "always"],
        "trailing-comma": [true, {"multiline": "never", "singleline": "never"}],
        "no-console": false
      }
    }
    

    Neste exemplo, foi usado o conjunto de regras recomendadas pelo TSLint, que inclui várias boas práticas para TypeScript. Vamos entender o que significa cada uma dessas configurações?

    • "defaultSeverity": "error": define o nível de severidade padrão para os problemas identificados pelo TSLint como "error", o que significa que eles são considerados erros no código.
    • "extends": ["tslint:recommended"]: estende as regras de configuração padrão do TSLint com aquelas recomendadas pela configuração padrão.
    • "rules": define regras personalizadas para o projeto.
    • "quotemark": [true, "single"]: define que as aspas simples (') devem ser usadas para delimitar strings.
    • "semicolon": [true, "always"]: requer que pontos e vírgulas sejam usados sempre no final de uma instrução.
    • "trailing-comma": [true, {"multiline": "never", "singleline": "never"}]: permite uma vírgula final apenas em objetos ou arrays com várias linhas, mas não em objetos ou arrays de uma única linha.
    • "no-console": false desabilita a regra que normalmente proíbe o uso da função console para evitar avisos no código.

    Existem vários pacotes de configuração disponíveis para o TSLint além do tslint:recommended. Por exemplo, alguns dos pacotes mais populares são:

    • tslint-config-airbnb: este é o conjunto de regras baseado no guia de estilo do Airbnb para JavaScript, adaptado para TypeScript. Ele segue um estilo mais rigoroso e consistente, que enfatiza a legibilidade e a manutenção do código.
    • tslint-config-prettier: este é o conjunto de regras que desabilita todas as regras que podem entrar em conflito com o Prettier, que é uma ferramenta de formatação automática de código. Ele é útil para usar em conjunto com o Prettier, para garantir que o seu código seja formatado de forma consistente e sem erros.

    Depois de construir o arquivo tslint.json devemos executar o TSLint no projeto. Para isso, é possível adicionar um script ao arquivo package.json, como o seguinte:

    "scripts": {
      "lint": "tslint -p tsconfig.json"
    }
    

    Esse script irá rodar o TSLint usando o arquivo tsconfig.json, que contém as configurações do compilador do TypeScript. Para rodar o script, basta digitar no terminal:

    npm run lint
    

    Isso irá mostrar os possíveis erros ou avisos encontrados pelo TSLint no código TypeScript do projeto, indicando o arquivo, a linha, a coluna e a regra violada. Por exemplo:

    ERROR: src/index.ts:1:13 - variable name must be in lowerCamelCase or UPPER_CASE
    ERROR: src/index.ts:3:1 - Calls to 'console.log' are not allowed.
    

    Para corrigir os erros automaticamente, é possível usar a opção --fix do TSLint, como no seguinte script:

    "scripts": {
      "lint:fix": "tslint -p tsconfig.json --fix"
    }
    

    Configuração do TSLin realizada, podemos ver agora o exemplo com o ESLint. Vamos lá!

    Configurando e usando o ESLint

    Para configurar o ESLint em um projeto TypeScript, é preciso instalar os seguintes pacotes via npm:

    npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin typescript
    

    Neste caso, estamos instalando três pacotes:

    • O primeiro é o “eslint” que é a ferramenta de linting;
    • O segundo é o @typescript-eslint/parser, que é um pacote que permite ao ESLint analisar e entender código TypeScript;
    • E por fim o @typescript-eslint/eslint-plugin, um pacote que contém um conjunto de regras específicas para TypeScript e serve como um plugin para o ESLint.

    Em seguida, é preciso criar um arquivo chamado “.eslintrc.js” na raiz do projeto, que irá conter as regras de linting a serem seguidas. Um exemplo simples de configuração é o seguinte:

    module.exports = {
      parser: '@typescript-eslint/parser',
      plugins: ['@typescript-eslint'],
      extends: [
        'eslint:recommended',
        'plugin:@typescript-eslint/recommended'
      ],
      rules: {
        'quotes': ['error', 'single'],
        'semi': ['error', 'always'],
        'comma-dangle': ['error', 'never'],
        'no-console': 'off'
      }
    };
    

    Neste exemplo, foi usado o parser e o plugin do TypeScript para o ESLint, que permitem analisar e aplicar regras ao código TypeScript. Além disso, foi usado o conjunto de regras recomendadas pelo ESLint e pelo plugin do TypeScript, que incluem várias boas práticas. Vamos entender esse conjunto de regras?

    • module.exports: esta é uma forma de exportar um objeto em JavaScript/Node.js que contém a configuração do ESLint.
    • parser: '@typescript-eslint/parser': define o analisador (parser) que o ESLint deve usar para entender código TypeScript. O @typescript-eslint/parser é o analisador específico para TypeScript.
    • plugins: ['@typescript-eslint']: especifica os plugins a serem usados, neste caso, o ESLint utilizará o plugin @typescript-eslint, que fornece regras e funcionalidades específicas para TypeScript.
    • extends: aqui você está estendendo configurações predefinidas. O ESLint vai herdar regras de duas configurações:
      • eslint:recommended: essa configuração inclui as regras recomendadas pelo ESLint para JavaScript. Isso ajuda a garantir boas práticas gerais de codificação.
      • plugin:@typescript-eslint/recommended: essa configuração amplia as regras recomendadas, que são específicas para TypeScript fornecidas e fornecidas pelo plugin @typescript-eslint.
    • rules: define as regras personalizadas para o seu projeto.
    • 'quotes': define como aspas devem ser usadas. Em 'error', 'single' significa que as aspas simples devem ser usadas, e é um erro se as aspas duplas forem usadas.
    • 'semi': define que todos os statements devem terminar com ponto e vírgula.
    • 'comma-dangle': define que não deve haver vírgulas finais em arrays e objetos.
    • 'no-console': define que a utilização de console não é proibida, ou seja, pode ser usada para depuração.

    Para executar o ESLint no projeto, é preciso adicionar um script ao arquivo package.json, como o seguinte:

    "scripts": {
      "lint": "eslint src/**/*.ts"
    }
    

    Esse script irá rodar o ESLint nos arquivos TypeScript dentro da pasta src. Para rodar o script, basta digitar no terminal:

    npm run lint
    

    Isso irá mostrar os possíveis erros ou avisos encontrados pelo ESLint no código TypeScript do projeto, indicando o arquivo, a linha, a coluna e a regra violada. Por exemplo:

    src/index.ts
      1:13  error  Variable name `HelloWorld` must match one of the following formats: camelCase or UPPER_CASE  @typescript-eslint/naming-convention
      3:1   error  Unexpected console statement                                                               no-console
    

    Para realizar correções automáticas nos erros, você pode usar a opção --fix do ESLint, conforme demonstrado no seguinte script

    "scripts": {
      "lint:fix": "eslint src/**/*.ts --fix"
    }
    

    Agora que você tem os dois exemplos de configuração, quero te mostrar mais uma coisa. Você pode integrar essa funcionalidade diretamente em seu ambiente de desenvolvimento com o Linting no VSCode. Vamos entender como?

    Linting no VSCode

    É possível executar o linting automaticamente ao salvar o arquivo, habilitando a opção editor.codeActionsOnSave nas configurações do VS Code. Por exemplo, para corrigir automaticamente os problemas detectados pelo ESLint e pelo TSLint ao salvar o arquivo, você pode adicionar o seguinte código nas configurações do VS Code:

    {
      // ... outras configurações
      "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true,
        "source.fixAll.tslint": true
      }
    }
    

    Conclusão

    Neste artigo, vimos como configurar e usar tanto o TSLint quanto o ESLint com TypeScript, destacando as principais diferenças entre as duas ferramentas e as melhores práticas de linting. Vimos também os benefícios de seguir as melhores práticas no desenvolvimento front-end, como a melhoria da qualidade, da performance, da compatibilidade e da acessibilidade do código.

    Personagem Sakura Kinomoto com cabelos curtos e lisos de cor castanha clara usando um uniforme de marinheiro clássico, que consiste em um vestido preto com uma gola branca e detalhes em branco nas bordas das mangas e uma boina. Ela está  batendo palmas na frente de outras pessoas que também estão batendo palmas.

    Agora se você deseja se aprofundar em TypeScript, não deixe de conferir a formação Formação Aplique TypeScript no front-end. Além disso, não deixe de compartilhar suas experiências de aprendizado desse assunto marcando os perfis da Alura. Nos vemos na próxima!

    Banner do Guia Tático Alura sobre carreira em tecnologia, destacando o mapa da carreira tech. A imagem convida a explorar diferentes caminhos profissionais, comparar possibilidades e encontrar a próxima fase da carreira na área de tecnologia, com chamada “Explore o mapa”.

    Avalie este artigo

    • Foto de Mônica Mazzochi Hillman

      Autor(a)

      Mônica Mazzochi Hillman

      Bacharela em Tecnologias Digitais, especialista em User Experience e pós graduanda em Docência e Performance na Educação a Distância com experiência em suporte técnico de T.I e com tecnologias front-end. Atualmente é Community Marketing na HostGator e instrutora na Alura.

    Explore por tópico

    • Back-end
    • Dados
    • DevOps
    • Front-end
    • Gestão & Negócios
    • Institucionais
    • Inteligência Artificial
    • Mobile
    • UX & Design

    Leia também

    • 02/04/2012

      Flexibilidade em páginas: como usar media queries eficazmente

      Ler mais
    • 06/12/2023

      Conhecendo o TypeScript no Front-end

      Ler mais
    • 08/11/2021

      Tailwind: criando componentes com @apply

      Ler mais
    Ver mais conteúdos

    Inscreva-se em nossa Newsletter

    Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.

    Institucional

    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status
    Institucional
    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status

    A Alura

    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes
    A Alura
    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes

    Conteúdos

    • Alura Cases
    • Imersão Engenharia de Software: Dev na Era da IA
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Conteúdos
    • Alura Cases
    • Imersão Engenharia de Software: Dev na Era da IA
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Alura