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.
| Grupo | Restrição e Asserções de Tipos |
|---|---|
| Tipo | Operador |
| Modo strict | Nã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 value | Avaliado 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.
🏷️ Restrição e Asserções de Tipos Relacionadas
💡 Casos relacionados
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.