241 pessoas já começaram a estudar hoje
241241pessoasjá começaram a estudar hoje
já começaram a estudar hoje

Enquanto você avalia,

241241pessoas já começaram a estudar hoje

Dê o próximo passo e inicie sua carreira

Dê o próximo passo e inicie sua carreira agora mesmo

Comece agora
  • Home

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    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 Inovação e Gestão
    • 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

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    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 multiplos 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

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    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

    • IA Conference
    • Alura Signals
  • Talent Lab
  • IA
  • Artigos
  • Para Empresas
Ver planos
Links principais
  • Planos e Promoções
  • Carreiras

    Ver todas
    • 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
    Entrar Ver Planos
  • Área de Interesse

    Entrar Ver Planos
  • Aulas ao Vivo - Skills & Go

    • Agentic Engineering: orquestre multiplos 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
    Entrar Ver Planos
  • Senioridade

    Entrar Ver Planos
  • Eventos Alura

    • IA Conference
    • Alura Signals
    Entrar Ver Planos
  • Links complementares do menu mobile
  • Talent lab
  • Inteligência Artificial
  • Pós Graduações
  • Artigos
  • 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
    • Plano Pro 24
    • Plano Plus 24
    • Plano Ultra Lab 24
    • LinkedIn
    • Instagram
    • YouTube
    1. Página inicial
    2. Back-end
    3. TypeScript: quando usar unknown em vez de any?

    TypeScript: quando usar unknown em vez de any?

    10 min10 minutos de leitura

    10 min10 minutos de leitura

    Publicado: 12 de Maio

    Última atualização: 15 de Maio

    1. O que é o tipo any?
    2. O que é o tipo unknown?
    3. Como implementar na prática?
    4. Conclusão
    5. Como aprender mais sobre o tema?
    6. FAQ | Perguntas frequentes sobre o tipo Unknown

    Você já sentiu aquela pontada de dúvida ao receber um retorno de uma API ou ao lidar com uma biblioteca externa? 

    Nessas horas, o any parece um abraço quentinho: ele aceita tudo, não reclama de nada e deixa o código rodar. Mas, como diz o ditado no mundo dev, “com grandes poderes vêm grandes responsabilidades” (e, às vezes, grandes erros de runtime). 

    Podemos pensar no any e no unknown como dois guias em uma floresta desconhecida. O any é aquele guia excessivamente otimista que diz: “Pode pisar em qualquer lugar, está tudo bem!”, até que você pisa em um buraco.

    Já o unknown é o guia cauteloso: ele para você na frente de cada arbusto e diz: “Não dê um passo até verificarmos se o chão é firme.” 

    Manter a tipagem segura não é apenas um “capricho” técnico. No mercado atual, onde sistemas escaláveis e colaboração entre grandes times são a regra, a clareza do código é o que separa um projeto de sucesso de um pesadelo de manutenção.

    O unknown é o “irmão responsável” do any, e ele permite que você mantenha a flexibilidade de dados dinâmicos sem abrir mão da proteção que o TypeScript oferece. 

    O que é o tipo any? 

    O any é, essencialmente, a “porta de saída” do sistema de tipos do TypeScript. Quando você atribui any a uma variável, você está dizendo ao compilador: “Ei, confie em mim, eu sei o que estou fazendo. Não precisa validar nada aqui”. 

    É o tipo mais flexível da linguagem, pois ele representa literalmente qualquer valor e permite que você acesse qualquer propriedade ou método sem questionamentos. 

    Na prática, o any costuma aparecer em três cenários principais: 

    1. Migração de JavaScript para TypeScript: Quando o volume de erros é tão grande que o “tipar tudo com any” parece a única saída para fazer o código compilar. 
    2. Pressa no desenvolvimento: Aquele famoso “depois eu arrumo” que acaba ficando para sempre no repositório. 
    3. Dados de origens incertas: Quando a pessoa desenvolvedora não tem certeza da estrutura que virá de um JSON externo. 

    O grande risco aqui é o efeito cascata. Se uma função retorna any, qualquer variável que receba esse valor também perde a proteção de tipo. Em pouco tempo, você terá um código TypeScript que se comporta como JavaScript puro, onde erros como TypeError: ‘x’  is not a function assombram as suas noites. 

    Da uma olhada nesse exemplo propositalmente absurdo: 

    function formataTexto(nome: string): any {  
    return `Olá, ${nome}`;  
    }  
    const listaDeExemplo: number[] = formataTexto("estudante");  
    console.log(listaDeExemplo);  
    console.log(typeof listaDeExemplo);  
    listaDeExemplo.push(42);

    O TypeScript não acusa erro. Mas em tempo de execução, o código quebra. Por quê? Porque a variável listaDeExemplo no momento do push já não é mais um number[]. É uma string. Ou seja: o any permitiu que eu mentisse para o sistema de tipos, e ele acreditou.  

    E o resultado? Bem... 

    “Captura do VS Code mostrando código TypeScript: função formataTexto retorna uma string, atribuída a variável tipada como number[]. No terminal, aparecem “Olá, estudante”, “string” e erro TypeError: listaDeExemplo.push is not a function ao tentar usar push em uma string.”

    É exatamente o tipo de problema que o TypeScript existe para evitar. No fim das contas, any não é apenas “um tipo flexível”, ele é a desativação do TypeScript naquele ponto do código. 

    Banner da Alura convidando profissionais a desenvolver habilidades em inteligência artificial para acompanhar as transformações do mercado de tecnologia. A campanha destaca que quem utiliza IA produz mais, cresce na carreira e se torna mais competitivo, reforçando que a inteligência artificial deixou de ser tendência e passou a ser uma habilidade essencial. O banner incentiva a começar a aprender IA com os cursos da Alura e impulsionar a transformação digital.

    O que é o tipo unknown? 

    O unknown é o que chamamos de tipo universal seguro. Assim como o any, você pode atribuir qualquer valor a uma variável do tipo unknown. No entanto, a semelhança para por aí. A grande diferença é que o TypeScript não permite que você faça nada com um valor unknown até que você verifique o que ele é. 

    Captura do VS Code com código TypeScript: função imprimir(msg: string) e variável dado: unknown = "Oi". Ao chamar imprimir(dado), aparece erro TS2345 informando que argumento do tipo unknown não é atribuível ao parâmetro do tipo string.

    A regra de ouro aqui é a cautela: você sabe que algo existe ali dentro, pode ser uma string, um objeto ou um número, por exemplo, mas você não sabe o que é (ainda). 

    Até mesmo tentar acessar a propriedade length em um unknown resultará em um erro de compilação.  

    A semântica do “Eu não sei” 

    Usar unknown comunica uma intenção clara para outras pessoas devs: “Eu recebi esse dado de algum lugar e não posso garantir sua estrutura agora”. É uma forma honesta de programar. Em vez de fingirmos que tudo está sob controle (como o any faz), admitimos a incerteza e preparamos o terreno para uma validação segura. 

    Como implementar na prática? 

    Agora que já entendemos a teoria, vamos colocar a mão na massa. O segredo para dominar o unknown é entender o conceito de Narrowing (estreitamento, afunilamento). Basicamente, é o processo de transformar um tipo genérico e desconhecido em algo específico e utilizável. 

    Quando trabalhamos com unknown, o desafio não é escrever o if, o desafio é não saber o que pode chegar, e é exatamente isso que diferencia esse cenário de quando usamos unions. 

    Cenário A: Tipagem restrita (Unions) 

    Imagine que você está criando uma função que recebe dados que podem ser: 

    • uma string 
    • um array de strings 
    • ou null 

    Aqui você já conhece todas as possibilidades. O TypeScript consegue acompanhar o seu raciocínio conforme você trata cada caso. 

    function imprimirLista(dados: string | string[] | null) { 
      if (Array.isArray(dados)) { 
        dados.forEach(dado => console.log(dado)); 
      }  
      else if (typeof dados === "string") { 
        console.log(dados.toUpperCase()); 
      } 
    }

    Nesse cenário, o narrowing acontece de forma natural. 

    O compilador entende: 

    • se passou pela verificação de array, então só pode ser string[] 
    • se passou pela verificação de string, então só pode ser string 

    Existe uma lista fechada de possibilidades e isso torna o código previsível e mais fácil de modelar. 

    Cenário B: O desafio do unknown 

    Agora imagine um outro caso: você recebe um dado desconhecido, pode ser o valor do localStorage, o resultado de um JSON.parse(), o retorno de uma biblioteca, um evento de usuário, etc. 

    Nesse momento você não tem nenhuma garantia sobre o formato desse dado. 

    É aí que entra o unknown. 

    function processarDesconhecido(valor: unknown) { 
      if (Array.isArray(valor)) { 
        valor.forEach(item => console.log(item)); 
      }  
      else if (typeof valor === "string") { 
        console.log(valor.trim()); 
      } 
    }

    Aqui o TypeScript não possui uma lista prévia de tipos possíveis, ele apenas sabe que esse valor pode ser qualquer coisa. Por isso ele exige que você investigue o dado antes de utilizá-lo. 

    Cada verificação funciona como uma etapa de validação: 

    1. Primeiro testamos se o valor é um array 
    2. Caso não seja, testamos se é uma string 

      Quando uma dessas condições é verdadeira, o tipo é estreitado dentro daquele bloco, ou seja: 

      • antes → unknown 
      • depois → um tipo específico e utilizável 

      Esse é o narrowing acontecendo na prática. 

      Quando o narrowing simples não é suficiente 

      Até agora usamos verificações básicas como o typeof e o Array.isArray, e isso funciona muito bem para tipos primitivos ou estruturas mais simples. Mas e quando estamos lidando com objetos complexos? 

      Por exemplo: 

      • um usuário 
      • um perfil 
      • um produto 
      • um payload de API 

      Nesse caso precisamos de uma forma mais estruturada de validar o tipo. 

      Cenário C: Recebendo dados de APIs externas 

      Ao consumir uma API, não temos controle total sobre o que o servidor envia (especialmente se for um serviço de terceiros). Em vez de tipar o retorno com any, use unknown. 

      async function buscarEndereco(cep: string): Promise<unknown> { 
        const resposta = await fetch(`https://viacep.com.br/ws/${cep}/json/`); 
        if (!resposta.ok) { 
          throw new Error("Erro ao buscar CEP"); 
        } 
        return resposta.json(); 
      } 
      const resultado = await buscarEndereco("01001000");

      Aqui o TypeScript impede o acesso direto às propriedades porque resultado é unknown. Isso nos força a validar antes de usar. 

      O uso de Type Guards 

      Para “desbloquear” o valor dentro de um unknown, usamos funções chamadas Type Guards. Elas verificam o tipo em tempo de execução e informam ao TypeScript que o valor é seguro. 

      Uma resposta típica da API ViaCEP contém campos como: 

      { 
        "cep": "01001-000", 
        "logradouro": "Praça da Sé", 
        "bairro": "Sé", 
        "localidade": "São Paulo", 
        "uf": "SP" 
      }

      Podemos criar uma interface e um Type Guard: 

      interface EnderecoViaCEP { 
        cep: string; 
        logradouro: string; 
        bairro: string; 
        localidade: string; 
        uf: string; 
      } 
      function ehEnderecoViaCEP(dado: unknown): dado is EnderecoViaCEP { 
        return ( 
          typeof dado === "object" && 
          dado !== null && 
          "cep" in dado && 
          "logradouro" in dado && 
          "bairro" in dado && 
          "localidade" in dado && 
          "uf" in dado 
        ); 
      } 
      async function exemplo() { 
        const resultado = await buscarEndereco("01001000"); 
        if (ehEnderecoViaCEP(resultado)) { 
          console.log(resultado.logradouro);  
          console.log(resultado.localidade); 
        } else { 
          console.log("Resposta inesperada da API"); 
        } 
      }
      O que está acontecendo aqui? 
      1. A interface como contrato: Criamos a interface EnderecoViaCEP para definir como esperamos que os dados sejam. É o nosso “cenário ideal”. 
      2. O parâmetro unknown: Note que na função ehEnderecoViaCEP, o dado entra como unknown. Isso é honesto: antes da validação, não podemos garantir que a API não retornou um erro ou um formato vazio. 
      3. O predicado de tipo: O segredo está no retorno dado is EnderecoViaCEP. Assim dizemos ao TypeScript: “Se esta função retornar true, você pode confiar que dado possui todas as propriedades da interface”. 
      4. A checagem de segurança: Dentro do if, o TypeScript faz o narrowing. Note que você pode digitar resultado. e o VS Code vai sugerir “logradouro” ou “localidade” com total confiança. Se o if falhar (caso a API mude o formato, por exemplo), caímos no else e evitamos que o sistema quebre tentando ler uma propriedade que não existe.

      Conclusão

      Chegamos ao fim da nossa jornada entre o permissivo e o seguro. Entender a diferença entre any e unknown é um divisor de águas na carreira de qualquer pessoa que desenvolve com TypeScript. 

      Ao escolher o unknown, você não está apenas silenciando o compilador, você está assumindo o compromisso de escrever um código mais resiliente, legível e profissional.

      É uma mudança de mentalidade que transforma o "programar por tentativa e erro" em "programar com confiança", aplicando conceitos de Clean Code desde a base da sua aplicação. 

      Como aprender mais sobre o tema?

      Essa mesma mentalidade é exatamente o que a Carreira de Desenvolvimento Front-End React propõe: uma evolução estruturada que vai além de “fazer funcionar”, preparando você para construir aplicações robustas, aplicar boas práticas arquiteturais e tomar decisões técnicas com confiança.  

      Ao dominar tipagem, testes, performance e padrões modernos dentro do ecossistema React, você transforma conhecimento em maturidade profissional, dando passos consistentes rumo à autonomia e, no futuro, à liderança técnica. 

      FAQ | Perguntas frequentes sobre o tipo Unknown 

      1. O unknown substitui o any em 100% dos casos? 

      Quase todos. O any ainda tem seu lugar em testes rápidos ou prototipagem inicial. Para produção, prefira sempre o unknown. 

      2. Usar unknown deixa o código mais lento? 

      Não. O TypeScript é removido na compilação. O custo é apenas o pequeno tempo de escrever as validações de tipo, o que economiza horas de debug depois. 

      3. Qual a diferença entre usar unknown e fazer um Type Assertion (as)? 

      O unknown obriga você a provar o tipo através de lógica (como typeof ou if). Já o Type Assertion (valor as Endereco) é você “forçando a barra” e dizendo ao compilador: “Trate isso como Endereco”. O assertion é mais arriscado, pois se o dado vier errado da API, o TypeScript não vai te avisar e o erro vai estourar no console da pessoa usuária. 

      4. Posso usar unknown para tipas o JSON.parse()? 

      Sim, e essa é uma excelente prática. Por padrão, o JSON.parse() retorna any, o que é um perigo silencioso. Ao atribuir o resultado a uma variável unknown, você se força a validar o JSON antes de acessar propriedades que podem não existir, tornando o processamento de dados muito mais robusto. 

      Banner da Alura convidando profissionais a desenvolver habilidades em inteligência artificial para acompanhar as transformações do mercado de tecnologia. A campanha destaca que quem utiliza IA produz mais, cresce na carreira e se torna mais competitivo, reforçando que a inteligência artificial deixou de ser tendência e passou a ser uma habilidade essencial. O banner incentiva a começar a aprender IA com os cursos da Alura e impulsionar a transformação digital.

      Avalie este artigo

      Foto de mikedesousa80 

      Autor(a)

      mikedesousa80 

      Explore por tópico

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

      Leia também

      • 28/05/2019

        Como separar palavras em String com C#

        Ler mais
      • 04/02/2024

        Padrões arquiteturais: arquitetura de software descomplicada

        Ler mais
      • 01/07/2024

        Revolução do low code e no code na criação de software

        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ões
      • Artigos
      • Podcasts
      • Artigos de educação corporativa
      Conteúdos
      • Alura Cases
      • Imersões
      • 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