如何从 Javascript 创建 Kotlin 地图?

问题描述 投票:0回答:1

我有一个 Kotlin 多平台方法,它采用

Map
作为参数。我如何从 JavaScript 调用它?

我见过从 JavaScript 创建 SetList 的实用函数,但不知道如何编写一个用于创建 Map 的函数。

kotlin kotlin-multiplatform kotlin-js
1个回答
0
投票

不幸的是,在 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
中工作。

© www.soinside.com 2019 - 2024. All rights reserved.