我正在尝试根据打字稿类型信息创建一个绑定到 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;
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试将其转换为 Scala.js 时:
@JSExport("clone")
def cloneJS[T](`object`: T): T = js.native
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
您不能导出 js.Any 子类的方法
(当我尝试用一种toString()方法做同样的事情时,也会发生类似的事情。)
跳过翻译这些方法是否安全,因为 Scala 可以处理它们,或者有办法修复此方法实现?
(我使用的是 Scala.js 0.6.3。)
@JSExport(和相关注释)旨在将 Scala 对象的方法和属性导出到 JavaScript。在这里,您正在为 Scala.js 使用的 JavaScript 对象定义一个接口,因此导出没有任何意义。
我看到您正在尝试为注释赋予不同的名称。为此,在外观类型中,还有另一个注释:@JSName. 所以你的方法的正确定义应该是:
@JSName("clone")
def cloneJS[T](`object`: T): T = js.native
Run Code Online (Sandbox Code Playgroud)
一切都会好起来的。
顺便说一句,在这种情况下,没有什么可以阻止首先使用名称定义 Scala 方法clone(因为有一个参数,它将与Object.clone()方法不同):
def clone[T](`object`: T): T = js.native
Run Code Online (Sandbox Code Playgroud)
也能正常工作,并且在通话现场可能会更好。
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |