En typkastning säger till compilatorn "lita på mig, detta värde är av typ X" med as. Den gör ingen omvandling eller kontroll vid körning — den ändrar bara hur compilatorn behandlar värdet.
ts
el = .() ;
el. = ;
data = .(str) ;
En typkastning säger till compilatorn "lita på mig, detta värde är av typ X" med as. Den gör ingen omvandling eller kontroll vid körning — den ändrar bara hur compilatorn behandlar värdet.
el = .() ;
el. = ;
data = .(str) ;
En assertion åsidosätter compileratorns bedömning — om du har fel får du en körningsfelkrasch utan varning:
const x = "hello" as unknown as number; // double assertion — compiler stops complaining
x.toFixed(2); // 💥 runtime error: x.toFixed is not a function
Assertion gör inte att värdet blir den typen; det tystnar bara checknern. Du har tagit ansvaret för korrekthet bort från compilatorn.
// 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 är annorlundaconst point = { x: 1 } as const; // not a risky cast — narrows to literal/readonly
Assertions är ibland nödvändiga (DOM-API:er, begränsning av unknown som du redan har kontrollerat), men var och en är en plats där compilatorn inte kan skydda dig.
Föredra typvakter eller schemavalidering för opålitlig data, och behandla varje as som ett litet, avsiktligt "Jag vet bättre" som du måste vara säker på.