我想围绕一个具有可实例化对象的javascript库编写一个scala.js包装器:
new Point({x: 10, y: 12})
似乎很简单。我希望有一个坐标案例类和一个包装器。
case class Coord(x: Int, y: Int)
class Point(coord: Coord) extends js.Object
这显然不起作用,因为case类没有转换为对象文字。我当然可以摆脱Coord案例类,而是将js.Dynamic.literal传递给构造函数,但这不是很安全的类型。
我还有什么其他选择?在传递给Point对象之前,我是否必须编写一个接受Coord并将其转换为对象文字的更高级别的包装器?
您有两种选择:
trait Coords extends js.Object {
def x: Int = js.native
def y: Int = js.native
}
class Point(coords: Coords) extends js.Object
case class Coords(x: Int, y: Int)
object Point {
def apply(coords: Coords): Point = new Point(
js.Dynamic.literal(x = coords.x, y = coords.y))
}
trait PointCoords extends js.Object {
def x: Int = js.native
def y: Int = js.native
}
@JSExportAll
case class Coords(x: Int, y: Int)
val c = Coords(1, 2)
new Point(js.use(c).as[PointCoords])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句