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

kotlin - 如何在 Kotlin 中为属性的支持字段设置 JsName?

我在 1.0.x 中使用了 Kotlin 不受支持的 JavaScript 后端,现在正在尝试将我的玩具项目迁移到 1.1.x。它是与 PouchDB 交互的单页 Web 应用程序的最基本部分。要将数据添加到 PouchDB,您需要具有特定属性的 JavaScript 对象_id_rev. 它们也不需要以任何其他属性开头,_因为它们是由 PouchDB 保留的。

现在,如果我创建一个这样的类,我可以将实例发送到 PouchDB。

但是,如果我做任何事情来使属性虚拟化——让它们覆盖一个接口,或者让类打开并创建一个覆盖它们的子类——_id字段名称就会变成类似的东西_id_mmz446$_0,因此 PouchDB 拒绝该对象。如果我应用@JsName("_id")到该属性,那只会影响生成的 getter 和 setter——它仍然会留下带有损坏名称的支持字段。

此外,对于名称不以 开头的任何虚拟属性_,PouchDB 将接受该对象,但它只存储带有它们的错位名称的支持字段,而不是命名良好的属性。

我想现在我可以通过让它们不是虚拟的来解决问题。但我正在考虑在 Kotlin 中共享 PouchDoc 和非 PouchDoc 类之间的接口,看来我做不到。

知道我该如何完成这项工作,还是需要更改 Kotlin 语言?

0 投票
1 回答
3334 浏览

javascript - kotlinc-js 没有输出 kotlin.js 文件

目前正在尝试通过命令行将 Kotlin "Hello, World" 编译为 JS。我已经按照教程进行操作:

https://kotlinlang.org/docs/tutorials/javascript/getting-started-command-line/command-line-library-js.html

我看到正在生成的 Javascript 文件,但我错过了kotlin.js我希望看到的文件: https ://kotlinlang.org/docs/tutorials/javascript/kotlin-to-javascript/kotlin-to-javascript .html

生成的 JS 文件的前几行内容如下: if (typeof kotlin === 'undefined') { throw new Error("Error loading module 'sample-library'. Its dependency 'kotlin' was not found. Please, check whether 'kotlin' is loaded prior to 'sample-library'."); }

所以很明显,它是用一个实例化的文件来运行的kotlin。任何想法为什么我没有看到它?我完全按照所写的教程进行操作。我正在使用来自 homebrew 的最新版本的编译器,即 1.1.2.2

0 投票
1 回答
687 浏览

javascript - 每个方法都需要@JsName 注释吗?

我试图让 NodeJs 与 Kotlin 一起工作,以获取 HelloWorld示例

根据Kotlin JS 文档重载方法需要 @JsName 注释。但根据我的经验,即使是单一方法也需要它。如果没有此注释,编译器会为方法名称添加一个后缀,如屏幕截图所示。在此处输入图像描述

这是一个错误吗?还是我错过了什么?

我正在使用 NPM 提供的 Kotlin 1.1.0 模块(如果需要,请查看上面的 GitHub 链接以获取完整的代码库)。

0 投票
3 回答
2899 浏览

kotlin - 以 JavaScript 为目标时如何表示多种类型(联合类型)

我想做的是使用可以是其他三种类型之一的泛型类型。

这是一个带有函数的示例:

上面的代码不起作用,那我该怎么做呢?

0 投票
2 回答
1688 浏览

promise - 如何从嵌套的 kotlin.js.Promise 创建 Promise?

kotlin.js.Promise具有then此声明的功能:

我有两个功能a()b(). 他们都返回一个Promise<Int>. (它们代表对服务器的一些请求。)我需要将它们组合并创建一个新函数,例如:

但这是不可能的,因为返回类型是Promise<Promise<Int>>而不是Promise<Int>

我认为这在 Javascript 中是可能的。我如何在 Kotlin 中链接 Promise?

0 投票
1 回答
1590 浏览

kotlin - 用 Kotlin JS 解析 JSON 很有趣解析(文本:字符串):T`?

我该如何使用

fun <T> parse(text: String): T

在 Kotlin JS 中解析 JSON?

例如,我如何解析这个 JSON 字符串?

0 投票
1 回答
957 浏览

kotlin - 如何从 Kotlin 调用需要 jQuery ajax 设置对象的 javascript 函数?

我需要转换下面的代码,它在 jQuery 中使用了一个叫做ajax 设置的东西(在下面的调用里面的 javascript 中使用它create()来创建一个CouchDB 数据库

我已经定义了这些

但我坚持如何转换 javascript 代码

jCouch.db.create("mydb"). 现在呢?

0 投票
1 回答
543 浏览

kotlin - 使用动态属性名称将属性分配给 javascript 对象

我想做这样的事情,但我不知道,我不能使用 js() 插入任何动态数据,因为 js() 只接受常量字符串参数(或者有没有办法做到这一点?)

0 投票
1 回答
822 浏览

javascript - How to set a static property on a class in Kotlin for Javascript

I have a situation where I need to define a static property on a class in Kotlin and when its compiled to Javascript have it become a true static field on that class. In this situation companion objects do not work.

For example, if I have an abstract class and its implementing class like below:

The Javascript that this compiles down to is this:

But what I need it to compile down to is this:

So that the id field does actually statically exist on MyClass without having to make a new instance of MyClass.

I've tried using a companion object but that creates a separate object/function called MyClass$Companion and then assigns the id field to that and never actually assigns it statically to MyClass.

How can I go about setting true static fields like this in Kotlin?

0 投票
1 回答
298 浏览

javascript - 如何在 Kotlin 中创建一个库并从针对 javascript 或 java 的项目中使用它?

我正在研究如何创建一个供前端和后端代码库使用的通用库。我希望能够创建一个纯粹用 Kotlin 编写的库,对其进行编译,并将所述工件注册为从 js(使用 npm)和 kotlin-java(使用 maven)导入的依赖项。这是一个受支持或可能的工作流程吗?如果是这样,这样做的方法是什么?