Scala.js 将 Scala 函数转换为 JS 函数

Scala.js convert Scala function to JS function

我知道隐式转换可用于 js.FunctionN <–> scala.FunctionN。但是,如果我以动态方式(没有类型化外观)使用库,它们将无济于事,因为编译器显然不知道我需要转换。例如,如果 JS 代码需要一个带有字符串和函数的 JS 数组作为输入——类似于

['Hello world', function ($x, $y) {
    console.log($x + $y)
}],

,我不能像这样在 Scala 中创建它:

    val a: js.Array[Any] = js.Array(
      "Hello world",
      (x: Int, y: Int) => {console.log(x + y)}
    )
  )

因为Scala函数不会转为JS函数。是否存在一些明确的转换方法,类似于可变 Seq 的 toJSArray?我检查过 asInstanceOf[js.Function] 不起作用。

asInstanceOf 不起作用,因为那基本上是在说 "this function is already a js.Function",这是不正确的。但是如果你给它一个明确的类型归属,这通常会正确转换,就像这样(没有尝试编译但应该大致正确):

val a: js.Array[Any] = js.Array(
  "Hello world",
  { (x: Int, y: Int) => {console.log(x + y)} }:js.Function2[Int, Int, Unit]
)

样板有点多,但这始终是没有外墙的代价...