为何Reason中自定义Map类型无法跨文件导出使用?
问题原因与解决方法
这问题我之前踩过坑!核心原因是在ReScript/OCaml体系里,类型默认是模块私有的——不像let定义的常量会自动对外暴露,你得主动把类型导出,其他模块才能访问到它。
具体操作步骤
直接在模块文件里显式导出类型
如果你没有单独的模块签名文件(.resi),只需要在类型定义前加上export关键字:// Scores.res // 加上export,让这个类型对外可见 export type scoreMap = Js.Dict.t<int> // 你的常量可以正常保留 let n = 123用模块签名文件(
.resi)控制导出
如果你习惯用签名文件来约束模块对外暴露的内容,那就在对应的.resi文件里声明这个类型:// Scores.resi // 声明要对外暴露的类型 type scoreMap // 同时暴露你的常量 let n: int然后在
.res实现文件里的类型定义会自动和签名关联,对外可见。
验证修改
修改完成后,你就可以在其他文件里正常使用这个类型了:
// 另一个文件,比如Main.res let myScoreMap: Scores.scoreMap = Js.Dict.empty() Js.Dict.set(myScoreMap, "Bob", 88) Js.log(Scores.n) // 常量依然可以正常调用
内容的提问来源于stack exchange,提问作者sdgfsdh
相关产品推荐
相关产品推荐

