Type assertion kertoo kääntäjälle "luota minuun, tämä arvo on tyyppistä X" käyttämällä as. Se ei suorita mitään runtime-muunnosta tai tarkistusta — se vain muuttaa sitä, miten kääntäjä käsittelee arvoa.
el = .() ;
el. = ;
data = .(str) ;
Type assertion kertoo kääntäjälle "luota minuun, tämä arvo on tyyppistä X" käyttämällä as. Se ei suorita mitään runtime-muunnosta tai tarkistusta — se vain muuttaa sitä, miten kääntäjä käsittelee arvoa.
el = .() ;
el. = ;
data = .(str) ;
Assertion ohittaa kääntäjän harkinnan — jos olet väärässä, saat runtime-kaatumisen ilman varoitusta:
const x = "hello" as unknown as number; // double assertion — compiler stops complaining
x.toFixed(2); // 💥 runtime error: x.toFixed is not a function
Assertion ei tee arvoa kyseiseksi tyypiksi; se vain hiljentää tarkistimen. Olet siirtänyt kääntäjältä pois vastuun oikeellisuudesta.
// 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 on eri asiaconst point = { x: 1 } as const; // not a risky cast — narrows to literal/readonly
Assertiot ovat joskus välttämättömiä (DOM-sovellusliittymät, unknown -arvon kaventaminen, jonka olet jo tarkistanut), mutta jokainen niistä on paikka, jossa kääntäjä ei voi suojella sinua.
Suosi type guardeja tai schema-validointia epäluotettaville tiedoille, ja käsittele jokaista as -operaattoria pienenä, tarkoituksellisena "tiedän paremmin" -väitteenä, jonka oikeellisuudesta sinun tulee olla varma.