You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中后置双感叹号!!的作用是什么?

TypeScript 后置双感叹号作用说明

你看到的后置双感叹号并不是TypeScript新增的独立语法,属于连续两次非空断言操作符的组合写法,和单次非空断言的效果完全一致,仅用于跳过TS编译阶段的空值校验,没有额外运行时逻辑。


语法区分

首先要明确两种易混的感叹号写法的差异:

  • 前缀!!<表达式>:JS原生语法,双重否定,作用是把任意类型的值强制转换为对应的布尔值
  • 后置<表达式>!!:TS语法,本质是连续多次使用非空断言,告诉编译器该表达式的值绝对不可能是null/undefined,无需做空值判断

示例代码拆解

你给出的代码:

/.*verification code is (\d{6}).*/.exec(email.body!!)!![1]

可以拆分为三层逻辑:

  1. email.body!!:对邮箱内容字段做非空断言,告诉TSemail.body一定是字符串类型,不会是空值,可安全传入正则exec方法作为参数
  2. exec(...)!!:对正则执行结果做非空断言,告诉TS本次正则匹配一定能命中结果,返回值不会是null,肯定是匹配结果数组
  3. 最后取匹配结果数组的第1个元素,也就是正则分组捕获的6位验证码

补充说明

  • 连续多次非空断言和单次断言效果完全一致,属于可省略的冗余写法,上述代码等价于更规范的写法:
    (/.*verification code is (\d{6}).*/.exec(email.body!))![1]
    
  • 非空断言仅在编译阶段生效,运行时不会做任何空值校验,如果实际运行时值为空,依然会抛出报错,不建议滥用,仅在100%确认值非空的场景下使用。

内容的提问来源于stack exchange,提问作者Xiphias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:09:02