postfix ! कंपाइलरला सांगते "मी हमी देतो की हा मूल्य येथे null किंवा undefined नाही " — कोणतीही runtime तपासणी न करता त्याच्या प्रकारातून null/undefined काढून टाकते.
ts
() {
.(name!.());
}
postfix ! कंपाइलरला सांगते "मी हमी देतो की हा मूल्य येथे null किंवा undefined नाही " — कोणतीही runtime तपासणी न करता त्याच्या प्रकारातून null/undefined काढून टाकते.
() {
.(name!.());
}
हे शुद्धपणे compile-time assertion आहे — asसारखे, ते कोणतीही runtime सत्यापन करत नाही. जर तुम्ही चूक केली तर ते क्रॅश होते:
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
यातील प्रत्येक हरलेल्या प्रकरणाचे हाताळणी करते ते स्वीकार न करता.
! एक तीक्ष्ण साधन आहे: हे कंपाइलर तुम्हाला देण्याचा प्रयत्न करत आहे त्या null-safety ला शांत करते.
हे कधीकधी न्याय्य आहे (तुमच्याकडे कंपाइलरला नसलेले ज्ञान आहे), परंतु वारंवार वापरल्याने strictNullChecks प्रतिबंधित करते अगदी null-crash बग पुन्हा आणत असे.
प्रथम ?., ??, किंवा स्पष्ट गार्डसाठी पोहोचा; ! फक्त तेव्हाच वापरा जेव्हा तुम्ही सत्यतेने non-nullness सिद्ध करू शकता.