You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用其他文件的JS函数/变量?及src/index.re调用src/util.js方法

在ReasonML中调用外部JavaScript函数与变量的方法

嘿,我来帮你搞定在ReasonML文件里调用JS函数和变量的问题!刚好你有src/util.js和src/index.re的场景,我一步步给你讲清楚:

第一步:确保JS文件的函数/变量已导出

首先得确认你的src/util.js里的辅助函数和变量是导出状态,这样外部文件才能访问。比如你的util.js可能是这样的:

// src/util.js
// 导出一个加法函数
export function calculateSum(a, b) {
  return a + b;
}

// 导出一个常量
export const DEFAULT_TIMEOUT = 5000;

如果是用CommonJS规范(比如Node.js环境),也可以这样写:

// src/util.js
module.exports = {
  calculateSum: function(a, b) { return a + b; },
  DEFAULT_TIMEOUT: 5000
};

第二步:在ReasonML文件中声明外部依赖

ReasonML是静态类型语言,所以需要用[@bs.module] external语法来声明要导入的JS实体,同时指定类型签名(这一步很重要,能帮你提前规避类型不匹配的错误)。

在src/index.re里这样写:

// src/index.re
// 导入util.js中的calculateSum函数,指定类型:接收两个int,返回int
[@bs.module "./util"] external calculateSum: (int, int) => int = "calculateSum";

// 导入util.js中的DEFAULT_TIMEOUT常量,类型为int
[@bs.module "./util"] external defaultTimeout: int = "DEFAULT_TIMEOUT";

这里的几个关键点:

  • [@bs.module "./util"]:指定要导入的JS模块路径(相对当前index.re的位置,所以用./util即可)
  • external:告诉ReasonML这是一个外部JS实体,不是Reason内部定义的
  • 类型签名:比如(int, int) => int表示这个函数接收两个整数参数,返回整数,你需要根据JS函数的实际逻辑调整类型
  • 最后的字符串"calculateSum":对应JS文件里导出的函数名称,如果Reason里的变量名和JS导出名一致,也可以写成""简化,但明确写出来更清晰

第三步:像使用普通Reason代码一样调用

现在你可以直接在index.re里调用这些JS函数和变量了,和使用原生Reason函数完全一样:

// src/index.re
// 调用JS函数
let total = calculateSum(10, 20);
Js.log(total); // 控制台输出30

// 使用JS常量
Js.log(defaultTimeout); // 控制台输出5000

额外情况:处理默认导出

如果你的util.js用的是默认导出(比如export default function xxx()),那导入方式稍有不同:

// src/util.js
export default function multiply(a, b) {
  return a * b;
}

对应的Reason导入:

[@bs.module "./util"] external multiply: (int, int) => int = "default";

这里用"default"来对应JS的默认导出。


内容的提问来源于stack exchange,提问作者Derek Chiang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:40:28