修复"您可能无法导出js.Any"的子类方法。

时间:2015-06-26 13:12:07

标签: scala.js

我正在尝试基于打字稿类型信息为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。)

1 个答案:

答案 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

也会起作用,并且在呼叫站点可能会更好。