JavaScript 中的常见做法是有一个接受选项参数的函数,如下所示:
function foo({ bar1, bar2, bar3 }) {}
foo({ bar1: 5, bar2: 3 })
在 Reason/OCaml 中,人们更愿意为这些函数使用带标签的参数:
let foo = (~bar1, ~bar2, ~bar) => {}
foo(~bar1=5, ~bar2=3, ())
现在,我知道有这种方法可以为以下函数创建 Reason/Bucklescript 绑定:
type barObj;
[@bs.obj] external makeBarObj : (
~bar1: int=?,
~bar2: int=?,
~bar3: int=?,
unit
) => barObj = "";
external foo : barObj => t = "foo";
foo(makeBarObj(~bar1=5, ~bar2=3, ());
然而,有没有一种更简单的方法来为这些函数编写绑定?我对这种方法的问题是,当调用一个接收选项对象的函数时,它会变得相当“长”,特别是如果它是一个多态参数,例如:
foo(`BarObj(makebarObj(~bar1=5, ~bar2=3, ())));