如何确保方法接收javascript文字(js.dynamic.literal)。它不是一种类型,但它是js.Dynamic所以它可以是任何东西。 谢谢
答案 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
的强制转换包含在随播广告中,因此类型不安全部分是最小的并且包含在内。