as Asserções de tipo (incluindo asserções duplas)

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

as Asserções de tipo (incluindo asserções duplas)

Uma asserção de tipo (as) diz ao compilador "eu conheço o tipo deste valor melhor do que você — trate-o como T". Ela nunca altera o valor em tempo de execução nem realiza conversão; simplesmente sobrepõe a inferência. Use-a quando você detém informações que o compilador não consegue obter (consultas ao DOM, valores unknown de terceiros), sabendo que uma asserção errada não é conferida.

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

const el = document.getElementById("root") as HTMLElement;

const data = JSON.parse(raw) as Config;   // comum: colapsa unknown/any para um tipo concreto

// quando dois tipos não compartilham nada, é necessária uma asserção dupla (code smell)
const n = value as unknown as Config;

⚙️ Parâmetros

as TFaz a asserção da expressão como T. O TS só permite asserções entre tipos "sobrepostos" (um atribuível ao outro); caso contrário, acusa erro
as unknown as TAsserção dupla: passa primeiro por unknown e depois para T, contornando a verificação de sobreposição. Quase sempre é sinal de um problema de modelagem

Retorno:Asserções não emitem código em tempo de execução — o resultado transpilado é idêntico sem o as; apenas a visão de tipos em tempo de compilação muda.

▶ Exemplo

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

Saída:

20 dark
string

(Saída de execução após a transpilação. Note a segunda linha: após a asserção para {w:number}, o valor em tempo de execução ainda é a string "1920x1080" — asserções não transformam valores, typeof legacy é "string". Uma asserção errada só aparece em tempo de execução)

💡 Observações

⚠️ Atenção Uma asserção não é uma conversão e não faz nada em tempo de execução. Faça a asserção de uma string como número e chame toFixed: compila e depois lança erro em tempo de execução — todo erro de asserção é adiado para o tempo de execução.
ℹ️ Info O TS 4.9 adicionou o operador satisfies, que valida contra um tipo preservando a inferência literal — muitos casos que antes exigiam as agora podem usar o mais seguro satisfies.
💡 Dica Ordem de preferência: estreitamento por type guard > unknown + estreitamento > asserção as > as unknown as. Reserve asserções para os casos em que você realmente sabe mais que o compilador e desconfie do seu design sempre que uma asserção dupla aparecer.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Por que dois tipos "sem relação" não podem ser convertidos diretamente com as?
R O TS exige que uma direção de atribuibilidade (uma sobreposição) exista entre os tipos convertidos, para bloquear conversões evidentemente erradas como string para number. Quando realmente necessário, usa-se as unknown as T — a cerimônia existe para fazer você parar e reconsiderar.
P Qual é a diferença entre as e anotação de tipo (: T)?
R A anotação restringe e verifica: o valor precisa de fato satisfazer T, ou ocorre um erro; as contorna a verificação por declaração. Prefira anotações — elas mantêm a proteção do compilador, enquanto as é você assinando por conta própria.
P Em arquivos JSX, o que é preferível: <T>expr ou as?
R Em arquivos .tsx, a asserção de colchetes angulares <T>expr conflita com a sintaxe JSX e não está disponível — use expr as T de forma consistente. As duas formas são semanticamente idênticas.
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%