当前位置: 首页 > ops >正文

TypeScript 中感叹号(!)两种位置用法

这是一个非常好的问题!

在 TypeScript 中,感叹号(!)有两种位置用法,它们含义完全不同:


✅ 一、后置感叹号 !(非空断言)

process.env.ADMIN_PRIVATE_KEY!

✅ 作用:

告诉 TypeScript:

“我开发者保证这个值不会是 undefinednull,你别报错。”

🔧 用途:

用于绕过 process.env.X 可能是 undefined 的类型报错(常见于 .env 变量)。

⚠️ 风险:

如果运行时确实是 undefined,程序会抛出运行时错误。


❌ 二、前置感叹号 !(逻辑“非”运算符)

!process.env.ADMIN_PRIVATE_KEY

✅ 作用:

这是 JavaScript 的逻辑“非”操作,代表布尔取反。

它会将表达式转换为布尔值并取反:

if (!process.env.ADMIN_PRIVATE_KEY) { throw new Error('缺少私钥'); }

这意味着:

  • 如果 process.env.ADMIN_PRIVATE_KEY 是 falsy(如 undefined, '', null),就会抛出错误;

  • 常用于手动校验环境变量是否存在


✅ 总结对比

写法用途含义场景
process.env.ADMIN_PRIVATE_KEY!非空断言"我保证这个一定有值"绕过 TypeScript 报错
!process.env.ADMIN_PRIVATE_KEY布尔取反"如果这个没值就执行"判断值是否存在


💡 建议用法

最好先用 !xxx 判断,再使用 xxx! 非空断言:

const key = process.env.ADMIN_PRIVATE_KEY;
if (!key) {throw new Error('Missing ADMIN_PRIVATE_KEY');
}
this.admin = new ethers.Wallet(key); // key现在TypeScript自动识别为string

这种方式比盲目用 process.env.ADMIN_PRIVATE_KEY! 更安全、更清晰。

http://www.xdnf.cn/news/10046.html

相关文章:

  • Baklib内容中台AI赋能智能服务升级
  • 从 leanback 的npe崩溃谈起
  • 深度解析:跨学科论文 +“概念迁移表” 模板写作全流程
  • 安装RHEL9.x操作系统
  • 56、Ocelot 概述
  • RSTP协议:秒级收敛解析
  • 建站新手:我与SiteServerCMS的爱恨情仇(一)
  • #Js篇:BlobFile对象URL.createObjectURL()fetchlocationnavigatornew URl
  • 打卡day41
  • 2505软考高项第一、二批真题终极汇总
  • 【MySQL】事务及隔离性
  • 气镇阀是什么?
  • excel导出引发的cpu问题
  • 附件上传唯一性校验
  • 【AI非常道】二零二五年五月,AI非常道
  • Linux研学-入门命令
  • neo4j图数据库
  • 深入了解MCP基础与架构
  • Vue3 + VTable 高性能表格组件完全指南,一个基于 Canvas 的高性能表格组件
  • Go语言通道如何实现通信
  • C文件操作1
  • 基于 AUTOSAR 的域控产品软件开发:从 CP 到 AP 的跨越
  • Java Web 开发详细流程
  • AgenticSeek: 100% 本地替代 Manus AI 的方案
  • Proteus寻找元器件(常见)
  • MFA多因素认证与TOTP算法核心解析(含Java案例)
  • 【产品经理从0到1】平台端产品设计
  • 超级对话2:大跨界且大综合的学问融智学应用场景述评(不同第三方的回应)之二
  • docker部署自动化测试环境笔记
  • Windows 11 家庭版 安装Docker教程