import scala.scalajs.js import scala.scalajs.js.annotation.{JSExportAll, JSImport} // js側が要求する引数の型をtraitで定義して @js.native trait ArgNative extends js.Object{ val a: String = js.native val b: Int = js.native } // JSファイルをimport @js.native @JSImport("./nyan.js", JSImport.Namespace) object NyanJS extends js.Object{ def nyan(args: ArgNative): Unit = js.native } // js側が要求する型に合わせてScala側から触るcase classを用意して @JSExportAll case class Arg(a: String, b: Int) object Main { def main(args: Array[String]): Unit = { // scalaからは普通にArgをcaseClassとして使って val arg = Arg("hey", 1) // こうやってjs側のオブジェクトにキャストして val argNative = js.use(arg).as[ArgNative] // JSのモジュールに渡す NyanJS.nyan(argNative) } }