问题标签 [kotlin-js-interop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1063 浏览

javascript - 从 Kotlin 调用 JavaScript

我有 ReactNative 项目,我正在尝试从 Kotlin 调用简单的 JS 函数(从 JS 调用 Kotlin 工作正常)。我的项目目录如下所示:
在此处输入图像描述

“共享”模块被编译为 commonjs 模块。

在 Main.kt 我有(缩短):

在 App.js 我有(缩短):

所以我试图从 Kotlin 调用 myFun() 来获取 JS 的控制台日志。但我得到例外:

我正在寻找这个文档:
https://kotlinlang.org/docs/reference/js-interop.html
https://kotlinlang.org/docs/reference/js-modules.html#applying-jsmodule-to-packages
但是我不确定如何使用这些注释(如果需要它们?)。感谢帮助。

0 投票
1 回答
303 浏览

kotlin - 在 KotlinJS 中访问“导出默认值”的正确方法是什么

我正在使用 Vue 和 KotlinJS,并认为我可以像Vue.set这样简单地访问 Vue 观察者函数:

但是我得到

未捕获的类型错误:$module$vue.set 不是函数

哪里$module$vue = require("vue")

什么是有效的(注意object default而不是companion object

为什么会这样,有没有解决这个问题的好方法?

0 投票
1 回答
273 浏览

intellij-idea - KotlinJS 1.2 不支持 Launch-Coroutine 和其他?

我目前正在 node.js 上为我的 kotlin-js 项目尝试协程。

我正在使用 IntelliJ-Idea 和 kotlin 插件 1.2.40

应该支持协程,是吗?但是IDE没有找到“启动”-协程?!

另一方面,找到了命名空间 kotlin.coroutines.experimental,我可以使用例如 suspendCoroutine 函数,但实际上应该可用于协程的功能并不多。

0 投票
1 回答
372 浏览

kotlin - 建模外部 JS 对象

PixiJS(或者更确切地说,Resource Loader),在 load 函数的回调中返回一个形状像这样的 JS 对象:

我的问题是......我如何在 Kotlin.js 中对此进行建模?我不能只说这是一个Map<String, LoaderResult>- 然后 Kotlin 将尝试使用get(实际上是一个被破坏的get)来索引它。dynamic而且我显然不能继承。

建议?

0 投票
3 回答
1540 浏览

javascript - 如何将 JavaScript 对象转换为 Kotlin 类?

我想将一个 JavaScript 对象加载到 Kotlin 类中。作为安全检查,我需要验证 Kotlin 对象实际上是我创建的类,因为某些 JavaScript 代码部分不是我的设计。我需要 JavaScript 正确返回,但我无法验证 Kotlin 类。

例如

JavaScript 对象

Kotlin 类

我使用这个 Kotlin 代码在 Kotlin 上获取 JavaScript 对象。

如何验证 JavaScript 对象是创建的 Kotlin 类?

0 投票
3 回答
1288 浏览

javascript - 如何从 JavaScript 执行 Kotlin WebAssembly 函数?

我的目标是编写一个 Kotlin 库,将其编译为 WebAssembly 并从 JS 调用它的函数。几个小时后,我试图让一个简单的 hello world 工作。关于这个主题的文档要么不存在,要么隐藏得很好。

这是我的 kotlin 文件:

当我将它编译为 WebAssembly 时,我得到一个hello.wasmhello.wasm.js文件。

首先,我尝试使用类似这样的东西来执行该功能:

然后我明白我需要在importObject参数中传递来自我的hello.wasm.js文件的导入。所以我想我需要使用hello.wasm.js文件来正确初始化我的 wasm 程序。

当我像下面这样加载我的 wasm 时,我没有收到任何错误并且main()函数被执行。

但是如何从 JavaScript执行hello()函数呢?我发现的唯一 kotlin wasm 示例不是调用特定函数,而是从main()函数渲染某些内容。

此外,非常感谢任何指向相关文档的链接。


更新: 我设法执行了该功能,但我不相信这是正确的方法:

问题是,如果我这样做,我的 wasm 文件会被提取两次。

仅加载没有 wasm 属性的 hello.wasm.js 文件会出现以下错误:

0 投票
1 回答
323 浏览

kotlin - Kotlin:调用 JavaScript 方法的扩展运算符

我尝试为 JavaScript 库编写类型安全的包装器。我需要使用可变参数(例如method(args...))从 JavaScript 调用方法。Kotlin 的乐趣也应该适用于可变参数。因为 Kotlin 支持扩展运算符,所以我尝试使用它,但 Kotlin 不想要这个。

示例代码:

编辑:忘记在代码中编写扩展运算符“*”。由于展开运算符,编译器返回错误。

Kotlin 编译器返回错误“无法在动态调用中应用扩展运算符”。

任何想法如何实现这样的包装器,还是我需要任何解决方法?

谢谢你的帮助!

0 投票
3 回答
846 浏览

javascript - 如何在 Kotlin 中定义一个全局 js 函数?

我在 KotlinJs 项目中创建的每个函数和变量都会进入一个模块。但我需要在全局范围内定义一些函数。

我使用 p5js 库(纯 js)。它允许用户在全局范围内定义事件处理函数。我试图在这个项目中使用 KotlinJS。但我不知道如何创建全局函数来处理 p5js 的事件。我所有的 Kotlin 函数都在模块内部。要调用我的 Kotlin 代码,我需要指定全名mymodule.draw()

目前,我必须使用全局函数制作额外的纯 JS 代码层,将执行转换为 kotlin 函数,如下所示:

这种方法的问题是大量的样板和重复代码。

0 投票
2 回答
1530 浏览

kotlin - 在 kotlin js 中加载资源文件(json)

鉴于此代码,我应该将 file.json 放在哪里才能在运行时中找到?

我尝试将它放在 src/main/resources/ 下,但没有运气。我还使用 Gradle 将 kotlin 编译为带有kotlin2js插件的 js。

0 投票
3 回答
601 浏览

kotlin - Kotlin/JS 外部声明 - “名称包含不能出现在 JavaScript 标识符中的非法字符”

编辑: Kotlin YouTrack尚不支持和跟踪


我正在尝试编写external与以下 Typescript 接口匹配的 Kotlin 声明(这是通过 表示 JavaScript 访问的有效 TS headers['content-length']):

Dukat 生成以下内容,应视为有效:

但现在编译器抱怨:

Name contains illegal chars that can't appear in JavaScript identifier

确实不能出现在 JS 标识符中,但也不是必须的。所有 Kotlin 对该属性的访问,例如:

如果编译为const length = headers["content-length"].

我尝试通过@JsName以下方式解决它:

  • @JsName("content-length")
  • @JsName("'content-length'")
  • @JsName("\"content-length\"")

但是所有这些都失败了,因为它们只允许作为有效 JS 标识符的字符串。有没有办法解决这个问题?