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
相关产品推荐
相关产品推荐

