Μια type assertion λέει στον compiler "πίστεψέ με, αυτή η τιμή είναι τύπου X" χρησιμοποιώντας as. Δεν εκτελεί κανένα runtime conversion ή έλεγχο — μόνο αλλάζει πώς ο compiler χειρίζεται την τιμή.
el = .() ;
el. = ;
data = .(str) ;
Μια type assertion λέει στον compiler "πίστεψέ με, αυτή η τιμή είναι τύπου X" χρησιμοποιώντας as. Δεν εκτελεί κανένα runtime conversion ή έλεγχο — μόνο αλλάζει πώς ο compiler χειρίζεται την τιμή.
el = .() ;
el. = ;
data = .(str) ;
Μια assertion παρακάμπτει την κρίση του compiler — αν κάνετε λάθος, θα πάρετε ένα runtime crash χωρίς προειδοποίηση:
const x = "hello" as unknown as number; // double assertion — compiler stops complaining
x.toFixed(2); // 💥 runtime error: x.toFixed is not a function
Η assertion δεν κάνει την τιμή αυτό το type· απλώς σιγάει τον checker. Έχετε αναλάβει την ευθύνη για την ορθότητα από τον compiler.
// 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 είναι διαφορετικόconst point = { x: 1 } as const; // not a risky cast — narrows to literal/readonly
Οι assertions είναι μερικές φορές απαραίτητες (DOM APIs, στένευση unknown που έχετε ήδη ελέγξει), αλλά καθεμία είναι ένα σημείο όπου ο compiler δεν μπορεί να σας προστατεύσει.
Προτιμήστε type guards ή schema validation για δεδομένα που δεν είναι αξιόπιστα, και αντιμετωπίστε κάθε as ως μικρό, σκόπιμο "ξέρω καλύτερα" που πρέπει να είστε σίγουροι.