非空断言写成 value!,表示断言该值不是 null 或 undefined,编译器会据此跳过空值检查。最常见的场景是从 DOM 取元素:document.querySelector('#app')!,因为你确信页面里存在这个元素,不想再写一层判空。它不产生任何运行时代码,只是给编译器一个承诺。
非空断言本质上是关闭类型保护,一旦判断错误,运行时就会对 null 调用方法而崩溃。更稳妥的替代方案是可选链 ?. 配合空值合并 ??,或者用类型守卫把空值显式排除。代码评审中见到 ! 应当多问一句是否真的保证非空,多数场景都有更安全的写法。
const el = document.querySelector('#app')!; // 断言非空 el.focus(); // 等价但更安全的写法: const el2 = document.querySelector('#app'); if (el2) el2.focus(); // 或者一行:document.querySelector('#app')?.focus();