如何从 Reason 中输入 JS 模块方法?
How can I type a JS module method from Reason?
为了将现有的基于 JS 的 WebUI 重构为 ReasonML,我尝试嵌入一些重构代码。目前,我通过将所有 ReasonML 代码(到目前为止)嵌入到 iframe
.
中来做到这一点
Space 非常有限,所以我不想添加一个做同样事情的 reasonml 模块,而是想在我的 ReasonML 代码中使用其中一种 JS 方法,但我不清楚键入调用的语法。在 JS 中,调用很简单:
toastr.success("You're awesome");
似乎没有 toastr
对象的显式构造函数,但无论如何我都尝试这样做:
type bread;
[@bs.new] external toastr: unit => bread = "toastr";
[@bs.send] external success: bread => string = "success";
及后面的代码:
let bread = toastr();
bread->success("Would be surprised if this worked.");
以上代码无法编译,在 bread->success("")
行失败并显示消息:
This expression has type string
It is not a function.
如何使这项工作(在 bs 8.4.2 中)?
编辑 #2
我已经更接近我希望使用的 JS 输出:
[@bs.scope "toastr"][@bs.val] external success: string => unit = "success";
我可以调用:
success("It worked?");
生成 JS:
toastr.success("It worked?");
但它在 运行 时抛出异常,因为它找不到 toastr
模块。
我想我现在遇到了不同的问题?
我相信你可以使用@module 实现你的目标:
@module("toastr") external success: string => unit = "success";
最后,我是这样做的:
[@bs.scope "toastr"][@bs.val] external t_success: string => unit = "success";
为了将现有的基于 JS 的 WebUI 重构为 ReasonML,我尝试嵌入一些重构代码。目前,我通过将所有 ReasonML 代码(到目前为止)嵌入到 iframe
.
Space 非常有限,所以我不想添加一个做同样事情的 reasonml 模块,而是想在我的 ReasonML 代码中使用其中一种 JS 方法,但我不清楚键入调用的语法。在 JS 中,调用很简单:
toastr.success("You're awesome");
似乎没有 toastr
对象的显式构造函数,但无论如何我都尝试这样做:
type bread;
[@bs.new] external toastr: unit => bread = "toastr";
[@bs.send] external success: bread => string = "success";
及后面的代码:
let bread = toastr();
bread->success("Would be surprised if this worked.");
以上代码无法编译,在 bread->success("")
行失败并显示消息:
This expression has type string
It is not a function.
如何使这项工作(在 bs 8.4.2 中)?
编辑 #2
我已经更接近我希望使用的 JS 输出:
[@bs.scope "toastr"][@bs.val] external success: string => unit = "success";
我可以调用:
success("It worked?");
生成 JS:
toastr.success("It worked?");
但它在 运行 时抛出异常,因为它找不到 toastr
模块。
我想我现在遇到了不同的问题?
我相信你可以使用@module 实现你的目标:
@module("toastr") external success: string => unit = "success";
最后,我是这样做的:
[@bs.scope "toastr"][@bs.val] external t_success: string => unit = "success";