javascript - 从 kotlin 创建新的 Node 模块对象

标签 javascript node.js kotlin

我正在尝试用 Kotlin 编写一个小型 Node.js 应用程序来测试和使用 javascript 互操作。从公开原型(prototype)“Bar”的外部 Node 模块“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()

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

  • 它不是类型安全的(这是使用 kotlin 之美的一部分)
  • 它对变量 foo 有隐式依赖,在编译时不会检查该变量
  • 该模块公开了许多具有不同构造函数参数集的此类对象,这将导致产生大量如上所述的 native 代码,这是我希望避免的

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

最佳答案

我想你必须将 Bar 定义为模块 foo 中的外部类:

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

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

关于javascript - 从 kotlin 创建新的 Node 模块对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44642521/

相关文章:

regex - 将字符串中的分数替换为小数

reactjs - 如何将 SVG 与 kotlin-react 结合使用

javascript - Angular:未创建 Cookie

javascript - 从中心即时裁剪图像 - Javascript?

javascript - 如何防止 `gulp-uglify` 移动我的全局变量?

node.js - TypeScript 编译中缺少 Carousel.d.ts。请通过 'files' 或“include”属性确保它位于您的 tsconfig 中

javascript - 页面重定向后保存和使用信息

javascript - 使用铁路由器后 meteor 模板助手不工作

mysql - 关系型 Json 数据库?

kotlin - 函数类型(T1,T2,..,Tr 与接口(interface) Function 之间的关系