Postfiksi ! i thotë kompajlerit "Unë garantoj se kjo vlerë nuk është null ose undefined këtu" — duke hequr null/undefined nga tipi i saj pa asnjë kontroll në kohën e ekzekutimit.
() {
.(name!.());
}
Postfiksi ! i thotë kompajlerit "Unë garantoj se kjo vlerë nuk është null ose undefined këtu" — duke hequr null/undefined nga tipi i saj pa asnjë kontroll në kohën e ekzekutimit.
() {
.(name!.());
}
Kjo është thjesht një pohim në kohën e kompajlimit — si as, nuk bën asnjë verifikim në kohën e ekzekutimit. Nëse gabohen, ajo rrëzohet:
const el = document.getElementById("app")!; // assert non-null
el.innerHTML = "hi"; // 💥 runtime error if #app doesn't actually exist
// 1. You've logically guaranteed it, but the compiler can't see it
if (map.has(key)) map.get(key)!.doThing(); // has() proves get() isn't undefined
// 2. Class fields initialized outside the constructor (DI, lifecycle hooks)
class C { value!: string; } // definite assignment assertion
name?.toUpperCase(); // optional chaining — no crash, yields undefined
const x = name ?? "default"; // provide a fallback
if (name) name.toUpperCase(); // narrow with a real check
Secila nga këto trajon rastin e mungesës në vend që ta pohojë atë.
! është një mjet i mprehtë: ajo heshtë sigurinë kundrejt null që kompajleri është duke përpjekur të të japë.
Kjo është ndonjëherë e justifikuar (ju keni njohuri që kompajleri nuk ka), por keqpërdorimi i saj riintrodhukon pikërisht buget e rrëzimit null që strictNullChecks parandalon.
Merre ?., ??, ose një mbrojtje eksplicite së pari; përdor ! vetëm kur mund të provosh me të vërtetë jo-nullshin.