પોસ્ટફિક્સ ! કમ્પાઈલરને કહે છે "હું આ મૂલ્યને નલ અથવા undefined નથી ગ્યારંટી આપું છું" — કોઈ રનટાઈમ ચેક વિના તેના પ્રકારમાંથી null/undefined દૂર કરે છે।
ts
() {
.(name!.());
}
પોસ્ટફિક્સ ! કમ્પાઈલરને કહે છે "હું આ મૂલ્યને નલ અથવા 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
તેમાંથી પ્રત્યેક આ આવતી કેસને નક્કી કરે છે તેને હટાવવાને બદલે।
! એક તીક્ષ્ણ સાધન છે: તે કમ્પાઈલર તમને આપવાનો પ્રયાસ કરતો નલ-સુરક્ષાને મૌન કરે છે।
તે ક્યારેક તર્કસંગત છે (તમારી પાસે કમ્પાઈલરને માહિતી નથી), પરંતુ તેનો અતિશય ઉપયોગ કરવાથી તમે strictNullChecks અટકાવતા બરાબર નલ-ક્રેશ બગ્સ પરિચય આપો છો।
પ્રથમ ?., ??, અથવા સ્પષ્ટ ગાર્ડ માટે જાઓ; ! માત્ર ત્યારે જ વાપરો જ્યારે તમે સાચું રીતે બિન-નલનેસ સાબિત કરી શકો।