如何确保scala.js方法参数是文字

时间:2015-04-23 16:19:46

标签: scala.js

如何确保方法接收javascript文字(js.dynamic.literal)。它不是一种类型,但它是js.Dynamic所以它可以是任何东西。 谢谢

1 个答案:

答案 0 :(得分:0)

没有办法,Scala.js类型系统能够强制执行。对我来说这似乎也是一种非常随意的限制。

有几件事情浮现在脑海中:

字面意思是你要求的:

使用宏来强制您的方法的参数是(JS)文字。如果你想检查它是否是一个字符串文字。

,这也是你必须要做的

请注意,并非每次调用js.Dynamic.literal都会在最后产生JS对象文字。考虑:

val mySeq = Seq("a" -> 1, "b" -> 2)
js.Dynamic.literal(mySeq: _*)

您可能想要做的事情:

如果要为库创建外观类型并创建选项对象,我们建议使用以下模式:

def myMethod(opts: MyMethodOptions): Unit = js.native

trait MyMethodOptions extends js.Object {
  val debug: Boolean
  val fast: Boolean
}

object MyMethodOptions {
  def apply(debug: Boolean = false, fast: Boolean = false): MyMethodOptions = 
    js.Dynamic.literal(debug = debug, fast = fast).asInstanceOf[MyMethodOptions]
}

像这样调用:

myMethod(MyMethodOptions(fast = true))

这样,对MyMethodOptions的强制转换包含在随播广告中,因此类型不安全部分是最小的并且包含在内。