Type assertion řekne kompilátoru "věřte mi, tato hodnota je typu X" pomocí as. Neprovádí žádný runtime konverzi ani ověřování — pouze změní, jak kompilátor hodnotu chápe.
ts
el = .() ;
el. = ;
data = .(str) ;
Type assertion řekne kompilátoru "věřte mi, tato hodnota je typu X" pomocí as. Neprovádí žádný runtime konverzi ani ověřování — pouze změní, jak kompilátor hodnotu chápe.
el = .() ;
el. = ;
data = .(str) ;
Assertion obchází úsudek kompilátoru — pokud se mýlíte, dostanete runtime selhání bez varování:
const x = "hello" as unknown as number; // double assertion — compiler stops complaining
x.toFixed(2); // 💥 runtime error: x.toFixed is not a function
Assertion hodnotu tím typem neučiní; pouze ztlumí kontrolu. Převzali jste odpovědnost za správnost od kompilátoru.
// 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 je jinéconst point = { x: 1 } as const; // not a risky cast — narrows to literal/readonly
Assertiony jsou někdy nezbytné (DOM API, zúžení unknown, které jste již ověřili), ale každý z nich je místo, kde vás kompilátor nemůže chránit.
Dejte přednost type guards nebo schema validation pro nedůvěryhodná data a považujte každý as za malý, záměrný "já vím lépe", který si musíte být jistý.