TypeScript 词条目录
前端Wiki/词条/非空断言

非空断言

定义用后缀 ! 告诉编译器某个值一定不为空,跳过空值检查

非空断言写成 value!,表示断言该值不是 null 或 undefined,编译器会据此跳过空值检查。最常见的场景是从 DOM 取元素:document.querySelector('#app')!,因为你确信页面里存在这个元素,不想再写一层判空。它不产生任何运行时代码,只是给编译器一个承诺。

非空断言本质上是关闭类型保护,一旦判断错误,运行时就会对 null 调用方法而崩溃。更稳妥的替代方案是可选链 ?. 配合空值合并 ??,或者用类型守卫把空值显式排除。代码评审中见到 ! 应当多问一句是否真的保证非空,多数场景都有更安全的写法。

JavaScript
const el = document.querySelector('#app')!;   // 断言非空
el.focus();

// 等价但更安全的写法:
const el2 = document.querySelector('#app');
if (el2) el2.focus();
// 或者一行:document.querySelector('#app')?.focus();
⚠ 常见误区
🔗 相关词条类型守卫与类型缩小常见报错排查
← 返回来源章节类型守卫与类型缩小