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

Edu*_*rdo 4 scala.js

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

sjr*_*jrd 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)
}
Run Code Online (Sandbox Code Playgroud)

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

var none = some.pack.OptionFactory.none()
var some = some.pack.OptionFactory.some(5)
Run Code Online (Sandbox Code Playgroud)

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

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

def foo(opt: Option[Int]): Unit = ???
Run Code Online (Sandbox Code Playgroud)

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

@JSExport
def foo(opt: js.UndefOr[Int]): Unit = foo(opt.toOption)
Run Code Online (Sandbox Code Playgroud)

这将允许JS简单地使用undefinedfor None和任何整数Some[Int],例如:

scalaJSObj.foo(undefined)
scalaJSObj.foo(5)
Run Code Online (Sandbox Code Playgroud)