我正在尝试用 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 的新实例。到目前为止我已经尝试过:
- Calling
val bar = foo.Bar()
。这被解释为函数,因此不起作用。
- 定义外部类Bar并创建一个新对象
val bar = Bar()
我能找到的唯一解决方法是通过本机 JavaScript 代码实例化该对象:val bar = js("new foo.Bar()")
。这可行,但有一些缺点:
- 它不是类型安全的(这是使用 kotlin 之美的一部分)
- 它对变量 foo 有隐式依赖,在编译时不会检查该变量
- 该模块公开了许多具有不同构造函数参数集的此类对象,这将导致产生大量如上所述的本机代码,我想避免这种情况
有什么方法可以实现这一点,最好是用纯 kotlin 吗?
我想你必须定义Bar
作为模块的外部类foo
:
@JsModule("foo")
external class Bar {
...
}
See https://kotlinlang.org/docs/reference/js-modules.html https://kotlinlang.org/docs/reference/js-modules.html and https://kotlinlang.org/docs/reference/js-interop.html https://kotlinlang.org/docs/reference/js-interop.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)