我有一个 Kotlin 多平台方法,它采用
Map
作为参数。我如何从 JavaScript 调用它?
不幸的是,在 Kotlin 2.0.0 以下,我们只能使用原生 JavaScript 代码来做到这一点,因为 JavaScript 没有定义
Map
。另请参阅 stdlib-js js.collections.kt
使用本机代码:
val pairs = mapOf("Hello" to "World").map { arrayOf(it.key, it.value) }.toTypedArray()
println(kotlin.js.js("new Map(pairs)")) // [object Map]
println(lodash.isMap(kotlin.js.js("new Map(pairs)"))) // true
从 Kotlin 2.0.0.RC1 开始,我们可以使用
Map.asJsReadonlyMapView
或 MutableMap.asJsMapView
:
import kotlin.js.collections.JsMap
// Note: important to use the experimental annotations
@OptIn(ExperimentalJsExport::class, ExperimentalJsCollectionsApi::class)
fun main() {
// It equivalent to function JsReadonlyMapView() { Map.call(this) }
println(mapOf("Hello" to "World").asJsReadonlyMapView()) // [object Map]
println(lodash.isMap(mapOf("Hello" to "World").asJsReadonlyMapView())) // false
// Or if it should be explicitly a JsMap
val jsMap: dynamic = JsMap<String, String>()
mapOf("Hello" to "World").forEach { (k, v) -> jsMap.set(k, v) }
println(jsMap) // [object Map]
println(lodash.isMap(jsMap)) // true
}
这两段代码都可以在
org.jetbrains.kotlin.multiplatform:2.0.0-RC1
中工作。