ScalaJS:如何从JS创建Option [A]?

时间:2015-10-10 17:11:26

标签: scala.js

我有一个我想从JS调用的ScalaJS函数,它有一个Option [String]参数。我无法弄清楚如何从JS创建一些[String]和None [String]。

1 个答案:

答案 0 :(得分:6)

简短的回答:你做不到。但是,您的问题有两种解决方案。

公开全局函数以构造Some并检索None(次优)

在Scala.js代码库中添加这样的对象:

package some.pack

@JSExport
object OptionFactory {
  @JSExport
  def none(): None.type = None

  @JSExport
  def some[A](value: A): Some[A] = Some(value)
}

您现在可以使用JS的工厂来创建选项:

var none = some.pack.OptionFactory.none()
var some = some.pack.OptionFactory.some(5)

直接公开API操纵js.UndefOr(推荐)

您可以直接从Scala.js类公开JS友好的API,而不是强制JS操纵Option。假设您要公开的函数类似于:

def foo(opt: Option[Int]): Unit = ???

您可以改为或者另外导出以下JS友好版本:

@JSExport
def foo(opt: js.UndefOr[Int]): Unit = foo(opt.toOption)

这将允许JS只使用undefined NoneSome[Int]的任何整数,例如:

scalaJSObj.foo(undefined)
scalaJSObj.foo(5)