修复 "You may not export a method of a subclass of js.Any"

Fixing "You may not export a method of a subclass of js.Any"

我正在尝试根据打字稿类型信息创建绑定到 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

我收到以下错误:

You may not export a method of a subclass of js.Any

(当我尝试用 toString() 方法做同样的事情时发生了类似的事情。)

跳过翻译这些方法是否安全,因为 Scala 可以处理它们,或者是否有修复此方法实现的方法?

(我正在使用 Scala.js 0.6.3。)

@JSExport(和相关注释)旨在将 Scala 对象的方法和属性导出到 JavaScript。在这里,您正在为 JavaScript 对象定义一个供 Scala.js 使用的接口,因此导出没有任何意义。

我看到您正试图为注释指定一个不同的名称。为此,在外观类型中,还有另一个注释:@JSName。所以你的方法的正确定义应该是:

@JSName("clone")
def cloneJS[T](`object`: T): T = js.native

一切都会好起来的。

顺便说一句,在这种情况下,没有什么可以阻止首先定义名称为 clone 的 Scala 方法(因为有一个参数,它将不同于 Object.clone() 方法) :

def clone[T](`object`: T): T = js.native

同样有效,并且在呼叫站点可能会更好。