Postfix-operatoren ! forteller kompilatoren «Jeg garanterer at denne verdien ikke er null eller undefined her» — den fjerner null/undefined fra typen uten noen kjøretidskontroll.
ts
() {
.(name!.());
}
Postfix-operatoren ! forteller kompilatoren «Jeg garanterer at denne verdien ikke er null eller undefined her» — den fjerner null/undefined fra typen uten noen kjøretidskontroll.
() {
.(name!.());
}
Det er rent en kompileringstids-assertion — som as, utfører den ingen kjøretidsverifisering. Hvis du tar feil, krasjer det:
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
Hver av disse håndterer det manglende tilfellet i stedet for å påstå det vekk.
! er et kraftig verktøy: det demper null-sikkerheten kompilatoren forsøker å gi deg.
Det er av og til berettiget (du har kunnskap kompilatoren mangler), men overbruk av det reintroduserer nøyaktig de null-krasjfeilene som strictNullChecks forhindrer.
Grip etter ?., ??, eller en eksplisitt guard først; bruk ! kun når du virkelig kan bevise at verdien ikke er null.