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

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! 更安全、更清晰。

相关文章:

  • 基于粒子滤波的PSK信号解调实现
  • C#上传图片后压缩
  • Java处理动态的属性:字段不固定、需要动态扩展的 JSON 数据结构
  • FastAPI 项目配置管理
  • C/C++ 面试复习笔记(2)
  • << C程序设计语言第2版 >> 练习 1-23 删除C语言程序中所有的注释语句
  • 高级数据结构与算法期末考试速成记录
  • 6个月Python学习计划 Day 9 - 函数进阶用法
  • ros2工程在普通用户下正常编译但root下编译无法成功也不会自动停止
  • 历年南开大学计算机保研上机真题
  • flask入门
  • MySQL数据归档利器:pt-archiver原理剖析与实战指南
  • 阻止H5页面中键盘收起的问题
  • React从基础入门到高级实战:React 高级主题 - React Concurrent 特性:深入探索与实践指南
  • springboot文件上传下载
  • AgenticSeek,开源本地通用AI Agent,自主执行任务
  • 如何优化Hive的查询性能?请详细说明查询优化的各个层面(SQL优化、配置优化、资源优化等)和具体方法。
  • Oracle数据库性能优化的最佳实践
  • 数据结构 堆与优先级队列
  • 【数据库】数据库恢复技术
  • 网站开发 php python/接外贸订单的渠道平台哪个好
  • 政府网站建设安全/seo优化招聘
  • 网站建设合同图片/线上宣传方案
  • 六安市网站制作/百度联盟官网
  • 网站专栏建设方案/自媒体有哪些平台
  • 陕西网站制作公司哪家好/搜索引擎市场份额2023