调用storage.get获取u64值默认返回0时报u64不可为null错误如何解决
错误产生原因
- AssemblyScript 语法规则限定
u64这类64位基础数值类型属于非可空值类型,不能和null组成联合类型。 storage.get泛型方法的官方定义中,默认值参数、返回值的类型都声明为T | null,当你显式指定泛型T为u64时,实例化的方法会出现u64 | null这个不符合语法的类型,直接触发编译错误,和你后续写的|| u64(0)兜底逻辑无关。
修复方案
方案1(推荐):使用u64专属读取方法
NEAR SDK 内置了专门针对基础数值类型的读取方法,不会触发可空类型校验,直接调用storage.getUint64即可:
const lastDeposit = storage.getUint64('lastDeposit', u64(0));
方案2:先判断键存在性再使用泛型读取
如果需要沿用storage.get泛型方法,可以先通过contains方法判断键是否存在,存在时才执行读取,避免触发null返回逻辑:
const lastDeposit: u64 = storage.contains('lastDeposit') ? storage.get<u64>('lastDeposit') : u64(0)
内容的提问来源于stack exchange,提问作者Minh Thành
相关产品推荐
相关产品推荐

