问题标签 [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 投票
0 回答
699 浏览

kotlin - 如何从 Kotlin Native Wasm 调用 JavaScript(在浏览器中)并传递参数?

请原谅我不知道我是否应该在一篇文章中或单独询问所有基本类型。

主要问题:

  1. 如何将一组浮点数从 Kotlin 传递给 JS?
  2. 其他“简单”类型呢?像一个浮点数,字符串?
  3. 其他类型setmap甚至数据类呢?

我在 Kotlin 主文件的末尾有这个

如果cb()定义中的类型与我从 传递的内容相匹配main(),例如Int,Float那么cb()从浏览器将获得正确的值。

如果我使用Any,那么我将得到的只是一个整数(我猜应该是指向内存的指针)。

我试图检查heap但无济于事如何检索我cb()通过 Kotlin 传递给的 int、float 和字符串。

对于数组,我注意到jsinteropJsArray包中有,但我找不到关于如何使用它的好的参考资料。

我注意到的一件事是我可以通过 Arenas 获得一个整数数组:

然后我将通过konan_dependencies.env.arenas.

但是,我如何获得一组浮点数?请指教。

PS 我正在使用konan我的插件build.gradle来编译到 Wasm32。我通过将函数添加到in来传递callback给 Wasm :window.konan.librariesmodule.wasm.js

0 投票
1 回答
534 浏览

javascript - 在 JavaScript 中使用 Kotlin 标准库

我编写了一个 Kotlin 函数,该函数使用List<String>. 该函数有一个注释,@JsName以便我可以从 JavaScript 调用此函数。我无法确定我应该将什么传递给这个函数。传递 JavaScript 数组不起作用,因为 Kotlin-JS 代码调用iterator对象。此外,Kotlin 标准库中的名称都是错误的;所以我不能以任何可靠的方式listOf在 JavaScript 中调用 say 并将结果传递给函数。

那么问题是,如果 Kotlin 标准库名称被破坏,我们应该如何创建并传递给对象函数,而不是简单的类型(数字、字符串等)?

0 投票
1 回答
226 浏览

kotlin - 是否可以使用插值字符串模板调用 kotlin 的 js 函数?

现在,IntellJ 显示了一条红色波浪线:Argument must be a string constant

我已经搜索过,但我没有找到任何类似的问题。


由@alexey-romanov 解决

这很简单:

编译为:

0 投票
1 回答
679 浏览

kotlin - 如何在 kotlin/JS 中导入 JS 文件

我正在尝试将 THREE.js 与 kotlin/JS 一起使用。到目前为止它工作得很好,但是,我在如何导入 gLTFLoader 方面遇到了困难。文档说我应该这样做:

在科特林

在文件的开头工作。

这个

不起作用。和

也不起作用。在这两种情况下,我得到

找不到模块:错误:无法解析“/my_project_dir/build/js/packages/z-index/kotlin”中的“@three/examples/jsm/loaders/GLTFLoader”

所需的文件在 /my_project_dir/build/js/node_modules/three/examples/jsm/loaders/GLTFLoader.js Three.js 的主文件,显然可以找到,在 /my_project_dir/build/js/node_modules/三/src/Three.js。

如何进行所需的导入?

0 投票
1 回答
347 浏览

javascript - 在 KotlinJS 上实例化期望“new”关键字的 Javascript 类

考虑以下 javascript 代码(部分取自 Apollo Server 文档),它创建了一个 ApolloServer 实例并启动它。

现在考虑使用 KotlinJS 复制相同的行为。首先,Kotlin 没有“new”关键字,并且ApolloServer()按预期调用,不会工作但会引发错误(TypeError: Class constructor ApolloServer cannot be invoked without 'new')。

声明一个外部类,如:

并将其设置为 ApolloServer 类型没有帮助。

我们如何复制“new ApolloServer()”调用?

0 投票
1 回答
111 浏览

kotlin-js - 使用 Kotlin JS 的 Javascript 结构表示

我的问题是关于在 KotlinJS 中创建 javascript 结构并使用它们调用外部模块。假设我们有以下 js 代码,我们想将它翻译成 KotlinJS。

我们如何使用 Kotlin JS 表示上面的配置结构?有没有一种简单的方法来处理结构/json Kotlin 方面?我们可以以某种方式声明该结构是动态的吗?使用 Kotlin 对象没有帮助。

0 投票
2 回答
969 浏览

javascript - 如何将带有子项的 react-bootstrap 组件导入 kotlin-js react app

我想在使用 kotlin-js 创建的反应网站中使用引导卡组件。该应用程序使用 kotlin-react 包装器和 react-bootstrap 库。

react-bootstrap 文档说使用 <Card.Body> 来放置内容。

到目前为止,我设法将 Card JavaScript 模块导入 kotlin-js。

有了这个,我可以在 RComponent 中使用 Card。

导致:

我还需要 CardBody 组件。

像这样的东西:


但是 CardBody 不是一个单独的 react-bootstrap 组件,可以像 Card 组件一样导入。它是 Card 组件内部的一个值。


打字稿定义文件Card.d.ts如下所示:

如果我使用dukat将 TypeScript 定义文件转换为 Kotlin 声明。它输出一个Card.module_react-bootstrap.kt文件

但这不会编译。


  1. 如何为内部包含子组件而不是单独的组件文件的组件编写 kotlin 声明文件?
  2. 如何在 RBuilder.render() 方法中使用这个组件?
0 投票
2 回答
76 浏览

javascript - 如何在 Kotlin 编译为 JavaScript 中创建“选项对象”(具有许多可选属性的对象)?

背景:JavaScript 中的选项对象

JavaScript 中的一个常见概念是这样的:

所以基本上我们有一个“选项”对象,其中包含许多可选的属性。

问题:如何与 Kotlin 进行交互?

在 Kotlin 中,我们可能更愿意使用具有默认值的命名参数。但是,我想与使用上述概念的现有 JavaScript 库进行交互。我如何描述和使用 Kotlin 中的那个库?当然,它应该尽可能类型安全。

到目前为止我尝试过的

这是我想出的:

这确实有效,它还为选项提供了代码完成,这很棒,虽然它不像原始 JavaScript 那样短,但考虑到它的长度,感觉还可以。但是...有更好的方法吗?没有 有没有办法相处unsafeCast

0 投票
2 回答
621 浏览

kotlin - 是否可以在 Kotlin/JS 项目中导入 JavaScript 文件?

如果我有一个myfile.js如下调用的 JavaScript 文件:

如何将此文件导入 Kotlin/JS 项目并myJsFunc()从 Kotlin 代码调用?

0 投票
1 回答
80 浏览

npm - 在 github actions CI 上构建 kotlinJs 应用

我在设置 github 操作来构建我的 kotlinJS 项目时遇到了一些问题?我有 js 运行时依赖项:

我得到错误:

我是否必须安装 npm(或某些源)才能在 github 操作上进行这项工作?还是我需要使用一些 github 操作来在 github 操作上构建 kotlinJS?这是我的 github 操作 yaml - js lib 已构建并作为资源复制到 jar https://github.com/sentinelweb/cuer/blob /ab00c7a7cd969eafa72b0d28bc5ba5c5c3e099d3/.github/workflows/android.yml

下面是依赖关系树 - 删除jsMain依赖关系kotlinx-serialization-kotlinx-serialization-core-jslegacy会导致运行时/webpack 错误 - 所以我不确定这个依赖关系是在 kjs 运行时中创建的 - 但可能必须通过使用其他一些库来删除它。只是删除它会破坏运行时/webpack