问题标签 [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.
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
但是我不确定如何使用这些注释(如果需要它们?)。感谢帮助。
kotlin - 在 KotlinJS 中访问“导出默认值”的正确方法是什么
我正在使用 Vue 和 KotlinJS,并认为我可以像Vue.set
这样简单地访问 Vue 观察者函数:
但是我得到
未捕获的类型错误:$module$vue.set 不是函数
哪里$module$vue = require("vue")
。
什么是有效的(注意object default
而不是companion object
:
为什么会这样,有没有解决这个问题的好方法?
intellij-idea - KotlinJS 1.2 不支持 Launch-Coroutine 和其他?
我目前正在 node.js 上为我的 kotlin-js 项目尝试协程。
我正在使用 IntelliJ-Idea 和 kotlin 插件 1.2.40
应该支持协程,是吗?但是IDE没有找到“启动”-协程?!
另一方面,找到了命名空间 kotlin.coroutines.experimental,我可以使用例如 suspendCoroutine 函数,但实际上应该可用于协程的功能并不多。
kotlin - 建模外部 JS 对象
PixiJS(或者更确切地说,Resource Loader),在 load 函数的回调中返回一个形状像这样的 JS 对象:
我的问题是......我如何在 Kotlin.js 中对此进行建模?我不能只说这是一个Map<String, LoaderResult>
- 然后 Kotlin 将尝试使用get
(实际上是一个被破坏的get
)来索引它。dynamic
而且我显然不能继承。
建议?
javascript - 如何将 JavaScript 对象转换为 Kotlin 类?
我想将一个 JavaScript 对象加载到 Kotlin 类中。作为安全检查,我需要验证 Kotlin 对象实际上是我创建的类,因为某些 JavaScript 代码部分不是我的设计。我需要 JavaScript 正确返回,但我无法验证 Kotlin 类。
例如
JavaScript 对象
Kotlin 类
我使用这个 Kotlin 代码在 Kotlin 上获取 JavaScript 对象。
如何验证 JavaScript 对象是创建的 Kotlin 类?
javascript - 如何从 JavaScript 执行 Kotlin WebAssembly 函数?
我的目标是编写一个 Kotlin 库,将其编译为 WebAssembly 并从 JS 调用它的函数。几个小时后,我试图让一个简单的 hello world 工作。关于这个主题的文档要么不存在,要么隐藏得很好。
这是我的 kotlin 文件:
当我将它编译为 WebAssembly 时,我得到一个hello.wasm和hello.wasm.js文件。
首先,我尝试使用类似这样的东西来执行该功能:
然后我明白我需要在importObject参数中传递来自我的hello.wasm.js文件的导入。所以我想我需要使用hello.wasm.js文件来正确初始化我的 wasm 程序。
当我像下面这样加载我的 wasm 时,我没有收到任何错误并且main()函数被执行。
但是如何从 JavaScript执行hello()函数呢?我发现的唯一 kotlin wasm 示例不是调用特定函数,而是从main()函数渲染某些内容。
此外,非常感谢任何指向相关文档的链接。
更新: 我设法执行了该功能,但我不相信这是正确的方法:
问题是,如果我这样做,我的 wasm 文件会被提取两次。
仅加载没有 wasm 属性的 hello.wasm.js 文件会出现以下错误:
kotlin - Kotlin:调用 JavaScript 方法的扩展运算符
我尝试为 JavaScript 库编写类型安全的包装器。我需要使用可变参数(例如method(args...)
)从 JavaScript 调用方法。Kotlin 的乐趣也应该适用于可变参数。因为 Kotlin 支持扩展运算符,所以我尝试使用它,但 Kotlin 不想要这个。
示例代码:
编辑:忘记在代码中编写扩展运算符“*”。由于展开运算符,编译器返回错误。
Kotlin 编译器返回错误“无法在动态调用中应用扩展运算符”。
任何想法如何实现这样的包装器,还是我需要任何解决方法?
谢谢你的帮助!
javascript - 如何在 Kotlin 中定义一个全局 js 函数?
我在 KotlinJs 项目中创建的每个函数和变量都会进入一个模块。但我需要在全局范围内定义一些函数。
我使用 p5js 库(纯 js)。它允许用户在全局范围内定义事件处理函数。我试图在这个项目中使用 KotlinJS。但我不知道如何创建全局函数来处理 p5js 的事件。我所有的 Kotlin 函数都在模块内部。要调用我的 Kotlin 代码,我需要指定全名mymodule.draw()
目前,我必须使用全局函数制作额外的纯 JS 代码层,将执行转换为 kotlin 函数,如下所示:
这种方法的问题是大量的样板和重复代码。
kotlin - 在 kotlin js 中加载资源文件(json)
鉴于此代码,我应该将 file.json 放在哪里才能在运行时中找到?
我尝试将它放在 src/main/resources/ 下,但没有运气。我还使用 Gradle 将 kotlin 编译为带有kotlin2js
插件的 js。
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 标识符的字符串。有没有办法解决这个问题?