पोस्टफिक्स ! कंपाइलर को बताता है "मैं गारंटी देता हूं कि यह मान यहां null या undefined नहीं है" — किसी भी रनटाइम चेक के बिना इसके प्रकार से null/undefined को हटाता है।
ts
() {
.(name!.());
}
पोस्टफिक्स ! कंपाइलर को बताता है "मैं गारंटी देता हूं कि यह मान यहां null या undefined नहीं है" — किसी भी रनटाइम चेक के बिना इसके प्रकार से null/undefined को हटाता है।
() {
.(name!.());
}
यह विशुद्ध रूप से कंपाइल-टाइम असर्शन है — as की तरह, यह कोई रनटाइम सत्यापन नहीं करता है। यदि आप गलत हैं, तो यह क्रैश होता है:
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-सुरक्षा को शांत करता है जो कंपाइलर आपको देने का प्रयास कर रहा है।
यह कभी-कभी उचित है (आपके पास वह जानकारी है जो कंपाइलर के पास नहीं है), लेकिन इसका अत्यधिक उपयोग बिल्कुल वही null-क्रैश बग को फिर से पेश करता है जो strictNullChecks को रोकता है।
पहले ?., ??, या स्पष्ट गार्ड के लिए पहुंचें; ! का उपयोग केवल तब करें जब आप वास्तव में non-nullness को साबित कर सकें।