typeof Estreitamento com typeof

Última atualização: 2026-10-22

typeof Estreitamento com typeof

O type guard com typeof é o mais comum: em tempo de execução, typeof retorna uma string de tipo para o valor, e o TypeScript estreita a união de acordo. Depois de typeof value === "string", value é tratado como string e os métodos de string podem ser chamados com segurança.

GrupoRestrição e Asserções de Tipos
TipoOperador
Modo strictNão necessário

ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.

📝 Sintaxe

function toNumber(value: string | number): number {
  if (typeof value === "string") {
    return Number(value);   // value: string aqui
  }
  return value;             // value: number aqui
}

⚙️ Parâmetros

typeof valueAvaliado em tempo de execução; retorna uma de oito strings: "string" / "number" / "boolean" / "object" / "function" / "undefined" / "symbol" / "bigint"

Retorno:A expressão typeof em si retorna uma string de tipo; o efeito de estreitamento ocorre em tempo de compilação — dentro do ramo, o tipo da variável passa a ser o tipo concreto correspondente.

▶ Exemplo

Edite o código abaixo e clique em Testar para ver o resultado transpilado:

Saída:

string of length 5
number, doubled = 42
boolean: off

(Saída de execução após a transpilação; value.length e value * 2 passam na verificação de tipos dentro de cada case porque o estreitamento por typeof está em vigor — o estreitamento é garantido estaticamente pelo tsc, em tempo de execução existem apenas os valores)

💡 Observações

ℹ️ Info typeof null === "object" é uma peculiaridade histórica do JS. O TypeScript trata isso de forma nativa: após uma verificação typeof, o caso null é estreitado corretamente e nunca vaza para o ramo "object".
⚠️ Atenção O typeof não distingue arrays de objetos comuns — ambos retornam "object". Use Array.isArray(x) para arrays e in ou uniões discriminadas para diferenciar formatos de objetos.
💡 Dica O typeof tem duas identidades: na posição de valor é o operador de tempo de execução; na posição de tipo é um operador de tipo (type T = typeof someVar). Esta entrada cobre o uso do primeiro para estreitamento.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Por que um array permanece "object" após uma verificação typeof?
R Arrays são objetos em JS, então typeof retorna "object" para eles. O TypeScript fornece Array.isArray() como o type guard dedicado para arrays — essa é a ferramenta certa para uniões como string | number[].
P switch (typeof value) é diferente de uma cadeia de ifs?
R O estreitamento é idêntico — o TS reconhece ambas as formas de guarda. O switch tem melhor legibilidade com 3 ou mais ramos e combina com a verificação de exaustividade (never no default) para detectar ramos ausentes.
P typeof value === "string" pode lançar um erro em tempo de execução?
R Não. typeof é um dos poucos operadores seguros sobre qualquer expressão — até uma variável não declarada apenas resulta em "undefined". Essa segurança é exatamente o que o torna tão eficaz como type guard.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%