我正在尝试基于打字稿类型信息为Scala.js的Javascript库(下划线)创建绑定。它包含一些方法,如下所示:
/**
* Create a shallow-copied clone of the object.
* Any nested objects or arrays will be copied by reference, not duplicated.
* @param object Object to clone.
* @return Copy of `object`.
**/
clone<T>(object: T): T;
问题是,当我尝试将其翻译为Scala.js时:
@JSExport("clone")
def cloneJS[T](`object`: T): T = js.native
我收到以下错误:
您可能无法导出js.Any
子类的方法
(当我尝试使用toString()
方法执行相同操作时会发生类似情况。)
跳过翻译这些方法是否安全,因为Scala可以处理它们,或者有办法修复此方法实现?
(我使用的是Scala.js 0.6.3。)
答案 0 :(得分:3)
@JSExport
(及相关注释)旨在将Scala对象的方法和属性导出到JavaScript。在这里,您要为Scala.js使用的JavaScript对象定义一个接口,因此导出并不代表任何东西。
我看到你试图用注释给出一个不同的名字。为此,在外观类型中,还有另一个注释:@JSName
。所以你的方法的正确定义应该是:
@JSName("clone")
def cloneJS[T](`object`: T): T = js.native
一切都会好的。
顺便说一下,在这个例子中,没有什么可以阻止首先定义名为clone
的Scala方法(因为有一个参数,它将与Object.clone()
方法不同):< / p>
def clone[T](`object`: T): T = js.native
也会起作用,并且在呼叫站点可能会更好。