The Graph开发中AssemblyScript定义对象报类型不匹配错误
报错原因
这个TS2322是Subgraph基于AssemblyScript编译时的类型不匹配错误,本质是你在代码中将FARMS_CONTRACT_NAMES对象或它的字符串属性值,赋值给了一个预先声明为i32(32位整数)类型的变量/实体字段。
常见触发场景包括:
- schema.graphql中对应实体的字段定义为
Int类型,但你在mapping逻辑中试图把FARMS_CONTRACT_NAMES的字符串属性赋值给该字段 - 你在Mapping代码中声明了
i32类型的变量,后续赋值时传入了字符串或整个对象 - 你将字符串类型的属性值作为数组下标使用,而数组下标要求必须是
i32类型
解决方案
先根据报错日志提示的文件行号,定位到具体的赋值逻辑位置,再根据业务需求选择对应修正方案:
- 若业务需要存储整数类型的农场枚举值:将现有字符串常量对象改为数值枚举,示例代码如下:
export enum FarmType { BALANCER_LIQUIDITY = 0, GIV_LIQUIDITY = 1, GIV_ETH = 2, GIV_HNY = 3 }
后续赋值时直接传入FarmType.BALANCER_LIQUIDITY这类枚举值即可匹配i32类型要求。
- 若业务需要存储字符串类型的农场名称:调整类型定义,把接收值的变量/实体字段类型从
i32/Int改为string/String即可。 - 若误将整个
FARMS_CONTRACT_NAMES对象传入,修正为取对应属性值即可。
内容的提问来源于stack exchange,提问作者Mohammad Ranjbar Z
相关产品推荐
相关产品推荐

