【问题标题】:Create new node module object from kotlin从 kotlin 创建新的节点模块对象
【发布时间】:2017-06-20 01:46:19
【问题描述】:

我正在尝试在 Kotlin 中编写一个小型 node.js 应用程序来测试和使用 javascript 互操作。从暴露原型“Bar”的外部节点模块“foo”,我正在尝试创建一个新的“Bar”实例。

在 Javascript 中,我会简单地编写类似的东西

var foo = require('foo')
var bar = new foo.Bar()

在 Kotlin 中,我定义了一个外部函数 'require' 并加载了按预期工作的模块:

external fun require(module: String): dynamic
...
val foo = require("foo")
//Somehow create a new Bar

现在我想创建一个新的 Bar 实例。到目前为止,我已经尝试过:

  • 致电val bar = foo.Bar()。这被解释为函数,因此不起作用。
  • 定义一个外部类 Bar 并创建一个新对象val bar = Bar()

我能找到的唯一解决方法是通过本机 javascript 代码实例化对象:val bar = js("new foo.Bar()")。这可行,但有一些缺点:

  • 它不是类型安全的(这是使用 kotlin 之美的一部分)
  • 它对变量 foo 具有隐式依赖,而该变量在编译时不检查
  • 该模块公开了许多具有不同构造函数参数集的此类对象,这将导致上面的大量本机代码,我想避免这种情况

有什么方法可以实现这一点,最好是在纯 kotlin 中?

【问题讨论】:

    标签: javascript node.js kotlin


    【解决方案1】:

    我猜你必须将 Bar 定义为来自模块 foo 的外部类:

    @JsModule("foo")
    external class Bar {
       ...
    }
    

    https://kotlinlang.org/docs/reference/js-modules.htmlhttps://kotlinlang.org/docs/reference/js-interop.html

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多