使用 BuckleScript 的 ReasonML 中的 JavaScript 构造函数行为

标签 javascript ocaml reason bucklescript

我想从 ReasonML 生成名为 Publisher 的 JavaScript 函数,以便我可以在其他文件中使用它,例如:

const publisher = new Publisher("Prasad", "email@email.com", "team@email.com", "rill")
const req = Publisher.toAPI(publisher) //  returns {name: "Prasad", email: "email@email.com", team: "team@email.com", service: "rill"}

为了实现上述功能,我在名为 Util.re 的文件中编写了 ReasonML 代码,如下所示:

type publisher = {
  name: string,
  emailID: string,
  teamEmailID: string,
  serviceName: string,
};

type publisherReqBody = {
  name: string,
  email: string,
  team: string,
  publisher: string,
};

module Publisher = {
  let toAPI = (p: publisher) => {
    name: p.name,
    email: p.emailID,
    team: p.teamEmailID,
    publisher: p.serviceName,
  };
  [@bs.new] external create: unit => publisher = "Publisher";
};


使用 BuckleScript 将 ReasonML 编译为 JavaScript 后,我​​得到了什么

// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE


function toAPI(p) {
  return {
          name: p.name,
          email: p.emailID,
          team: p.teamEmailID,
          publisher: p.serviceName
        };
}

var Publisher = {
  toAPI: toAPI
};

export {
  Publisher ,

}

我不知道为什么 [@bs.new] external create:unit =>publisher = "Publisher"; 行不起作用。 我已经尝试了一个小时但没有用。

我的问题:

如何实现我在 JavaScript 的第一个代码片段中提到的功能(从 ReasonML 编译而来)

非常感谢!

最佳答案

外部定义是如何使用 JavaScript 值的描述,而不是值本身。当您使用该外部时,它将内联就地正确的代码。

如果您在代码段下方执行letpublisher = Publisher.create();,您将看到在调用站点生成的代码将是:

var publisher = new Publisher();

关于使用 BuckleScript 的 ReasonML 中的 JavaScript 构造函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59562044/

相关文章:

javascript - 来自服务器数据的动态路由

javascript - Node.js Array.map() 是异步的吗?

performance - F# 处理复杂键(如数据结构中的 int*int*int)比 Ocaml 慢得多

ocaml - OCaml 中的仿函数签名

module - 我可以用 1 个模块实现多种模块类型吗?

unicode - 如何在原因 react 组件中添加版权符号?

javascript - 每 x 小时/天存储/保存数据库值并将其显示为图表 - 收集统计数据

javascript - 谷歌地图 JavaScript v3 未定义错误

functional-programming - 如何在 OCaml 中写入 `result?1:0`?

ocaml - 为具有泛型类型参数的多态变体编写类型约束