Uma asserção de tipo diz ao compilador "confie em mim, este valor é do tipo X" usando as. Ela não faz conversão ou verificação em tempo de execução — apenas muda como o compilador trata o valor.
el = .() ;
el. = ;
data = .(str) ;
Uma asserção de tipo diz ao compilador "confie em mim, este valor é do tipo X" usando as. Ela não faz conversão ou verificação em tempo de execução — apenas muda como o compilador trata o valor.
el = .() ;
el. = ;
data = .(str) ;
Uma asserção sobrescreve o julgamento do compilador — se você estiver errado, você terá um crash em tempo de execução sem aviso:
const x = "hello" as unknown as number; // double assertion — compiler stops complaining
x.toFixed(2); // 💥 runtime error: x.toFixed is not a function
Asserir não torna o valor desse tipo; apenas silencia o verificador. Você tirou a responsabilidade de corretude do compilador.
// 1. type guard — actually verify at runtime
if (typeof input === "string") { /* input is string, proven */ }
// 2. validation library (zod) for external data
const user = UserSchema.parse(data); // throws if shape is wrong
as const é diferenteconst point = { x: 1 } as const; // not a risky cast — narrows to literal/readonly
Asserções são às vezes necessárias (APIs de DOM, estreitamento de unknown que você já verificou), mas cada uma é um lugar onde o compilador não pode protegê-lo.
Prefira type guards ou validação de schema para dados não confiáveis, e trate cada as como um pequeno e deliberado "eu sei mais do que você" que você deve ter certeza.