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

[复制链接]
发表于 2025-7-9 00:27:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
这是一个非常好的题目!
在 TypeScript 中,感叹号(!)有两种位置用法,它们含义完全差异:

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

process.env.ADMIN_PRIVATE_KEY!
✅ 作用:

告诉 TypeScript:
“我开发者包管这个值不会是 undefined 或 null,你别报错。”
🔧 用途:

用于绕过 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! 非空断言:
  1. const key = process.env.ADMIN_PRIVATE_KEY;
  2. if (!key) {
  3.   throw new Error('Missing ADMIN_PRIVATE_KEY');
  4. }
  5. this.admin = new ethers.Wallet(key); // key现在TypeScript自动识别为string
复制代码
这种方式比盲目用 process.env.ADMIN_PRIVATE_KEY! 更安全、更清晰。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-25 08:06 , Processed in 0.075165 second(s), 30 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表