首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala.js外观中,为什么@js.native注释不允许@JSExport?

在Scala.js外观中,为什么@js.native注释不允许@JSExport?
EN

Stack Overflow用户
提问于 2018-06-04 22:14:20
回答 1查看 130关注 0票数 1

请考虑一个具有本机依赖关系的Scala.js库,该库作为纯JavaScript CommonJS模块实现。

库包含JavaScript依赖项的外观。正如预期的那样,外观包含了很多代码,如:

代码语言:javascript
复制
@JSImport("com", "Foo") @js.native
class Foo extends js.Object { ... }

不幸的是,ScalaJS将Foo隐藏在全局范围之外。显而易见的解决方法是将@JSExport注释添加到另外两个注释中,但这会导致编译器错误。

为什么js.native与JSExport不兼容?在外观上添加对@JSExport的支持需要什么?

现在有工作可做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 09:32:21

顶层类和对象上的@JSExport被废弃为在Scala.js 0.6.15中。你想要的实际上是@JSExportTopLevel

@JSExportTopLevel@JSImport/@JSGlobal不兼容没有根本原因。这并不是因为以下三件事:

  • 支持它意味着要在整个编译器工具链中做更多的工作来支持它,
  • 感觉就像一个罕见的用例,而且
  • 还有另一种方法来实现同样的结果。

实现此结果的另一种方法是导出存储导入结果的val,如下所示:

代码语言:javascript
复制
@js.native
@JSImport("com", "Foo")
class Foo extends js.Object { ... }

// 'private' not to pollute the Scala API with this object
private object Reexports {
  @JSExportTopLevel("Foo") // or another name
  val Foo = js.constructorOf[Foo]
}

如果您只重新导出一个这样的导入,它肯定会更冗长一些,但是您可以在唯一的object Reexports中捆绑您想要的多少。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50689504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档