compactc生成的TypeScript目标文件为空是否符合预期?
Compact合约编译后生成空TypeScript结构的问题解答
问题背景
你的两个Compact合约代码如下:
- a.compact:
module a { export sealed ledger num: Uint<8>; }
- b.compact:
import "a"; constructor() { num = 10; }
使用compactc编译后生成的TypeScript文件中,Ledger、Circuits等核心类型均为空结构,这种情况不符合预期,问题出在合约的引用逻辑上。
原因分析
你在b合约中仅导入了a模块,但没有明确声明当前合约要复用a模块的ledger定义。Compact编译器不会自动关联导入模块的ledger到当前合约,因此无法识别你要将num作为合约状态的一部分,最终生成空的TypeScript类型结构。
修复方案
修改b.compact代码,明确声明当前合约的ledger继承自a模块的ledger:
import "a"; // 声明当前合约复用a模块的ledger定义 ledger a.ledger; constructor() { num = 10; }
预期结果
修复后重新编译,生成的TypeScript文件中Ledger类型会正确包含num字段:
export type Ledger = { num: number; }
其他相关结构也会根据合约逻辑生成对应的定义,不再是空结构。
内容的提问来源于stack exchange,提问作者Petlover620
相关产品推荐
相关产品推荐

