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

TypeScript中如何将Nullable类型赋值给NonNullable变量?

TypeScript 处理 Address | null 赋值给 Address 常量的正确方式

你遇到的问题是 TypeScript 无法自动将 Address | null 类型收窄为 Address,以下是几种可靠的解决方式:

1. 非空断言(确定值不为 null 时使用)

如果你能保证运行时 event.transaction.to 绝对不会是 null,可以直接用非空断言符 ! 告诉编译器跳过 null 检查:

const to: Address = event.transaction.to!;

注意:如果运行时该值实际为 null,会导致运行时错误,所以必须确保场景安全。

2. 类型守卫+异常抛出(处理异常场景)

如果 event.transaction.to 为 null 属于业务异常,可以通过判断抛出错误,同时让 TypeScript 自动收窄类型:

const to = event.transaction.to;
if (!to) {
  throw new Error("交易目标地址不能为空");
}
// 此时 to 的类型已被收窄为 Address,可直接作为常量使用

3. 空值合并运算符(使用默认值)

如果允许在值为 null 时使用默认地址,用 ?? 空值合并运算符可以直接得到常量:

const to: Address = event.transaction.to ?? Address.fromString("0x0");

这个运算符只会在左侧为 null 或 undefined 时使用右侧默认值,比 || 更安全(避免 falsy 值误触发)。

你之前用 let 的写法无效,大概率是因为 TypeScript 无法通过 if(event.transaction.to) 完成类型收窄——比如 Address 类的实例在布尔判断中可能被视为 falsy 值,或者代码上下文存在其他干扰类型推断的因素。上面的几种方式都能直接解决类型不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:10:36