Postfix ! memberitahu kompiler "Saya menjamin nilai ini bukan null atau undefined di sini" — menghapus null/undefined dari tipenya tanpa pemeriksaan runtime apa pun.
() {
.(name!.());
}
Postfix ! memberitahu kompiler "Saya menjamin nilai ini bukan null atau undefined di sini" — menghapus null/undefined dari tipenya tanpa pemeriksaan runtime apa pun.
() {
.(name!.());
}
Ini murni aseversi waktu kompilasi — seperti as, ia tidak melakukan verifikasi runtime apa pun. Jika Anda salah, akan mogok:
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
Masing-masing menangani kasus yang hilang daripada membantahnya.
! adalah alat yang tajam: ia meredam keamanan null yang dicoba diberikan kompiler.
Kadang-kadang dapat dibenarkan (Anda memiliki pengetahuan yang tidak dimiliki kompiler), tetapi penggunaan berlebihan memperkenalkan kembali bug kerusakan null yang sama persis yang dicegah oleh strictNullChecks.
Cari ?., ??, atau penjaga eksplisit terlebih dahulu; gunakan ! hanya ketika Anda benar-benar dapat membuktikan non-nullness.