使用来自 JavaScript 的 Kotlin 标准库

Using Kotlin standard library from JavaScript

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

那么问题是,如果 Kotlin 标准库名称被破坏,我们应该如何创建并传递给对象函数?

您可以在 Kotlin 中与 JavaScript 互操作时使用 ArrayList,因为 List 是一个接口(不在 JavaScript 中)并且(其中之一)它的实际实现是ArrayList.

在处理 List<String> 时,您可以在 JavaScript:

中执行此操作
let list = new kotlin.kotlin.collections.ArrayList(["foo","bar","baz"])

并且您可以将 list 变量传递给需要 List<String> 参数的函数。

备注:

  1. 如果您的某些 Kotlin 函数 returns 列表,您可以调用 list.toArray() 将列表从 Kotlin 转换回 JavaScript 数组。
  2. 我会声明 "middleman"(适配器)函数,将项目推送到 List,需要 MutableList 并调用 add,因为库函数是损坏。 (我也想要一个更合适的方法)
  3. 如果您需要处理自定义对象列表,例如class Foo,你应该可以调用 new <package>.<identifier>...Foo(params).