Postfix ! memberitahu penyusun "Saya menjamin bahwa nilai ini bukan null atau undefined di sini" — menghapus null/undefined dari jenisnya tanpa pemeriksaan runtime apa pun.
() {
.(name!.());
}
Postfix ! memberitahu penyusun "Saya menjamin bahwa nilai ini bukan null atau undefined di sini" — menghapus null/undefined dari jenisnya tanpa pemeriksaan runtime apa pun.
() {
.(name!.());
}
Ini adalah penegasan waktu-kompilasi murni — seperti as, ia tidak melakukan verifikasi runtime apa pun. Jika Anda salah, ia 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
Setiap ini menangani kasus yang hilang daripada menegaskannya.
! adalah alat yang tajam: ia membisukan keamanan null yang coba diberikan penyusun kepada Anda.
Kadang-kadang dibenarkan (Anda memiliki pengetahuan yang tidak dimiliki penyusun), tetapi penggunaan berlebihan memperkenalkan kembali bug jatuh null yang strictNullChecks cegah.
Jangkauan untuk ?., ??, atau penjaga eksplisit terlebih dahulu; gunakan ! hanya jika Anda benar-benar dapat membuktikan non-nullness.