我想从 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/