You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从JavaScript创建Kotlin Map以调用多平台方法?

在JavaScript中调用接收Map参数的Kotlin多平台方法

Kotlin多平台中的Map<K, V>类型会被编译为Kotlin专属的实现对象,和JavaScript原生的Object或Map不兼容,必须通过Kotlin标准库提供的工具函数创建符合要求的Map实例,才能正确传递给Kotlin方法。

1. 基础工具函数实现

你可以直接利用Kotlin标准库暴露的kotlin.collections.mapOf函数,写一个简单的JS工具函数快速转换:

// 工具函数:将JS对象转为Kotlin Map
function createKotlinMap(jsObject) {
    // 把JS对象转成键值对数组,传入kotlin.collections.mapOf
    return kotlin.collections.mapOf(...Object.entries(jsObject));
}

2. 调用示例

假设你的Kotlin多平台方法定义如下:

// Kotlin 多平台代码
package com.example

fun processMap(input: Map<String, Int>) {
    // 业务处理逻辑
}

在JS中调用时:

// 创建JS原生对象
const userData = { "age": 25, "score": 90 };
// 转成Kotlin Map
const kotlinMap = createKotlinMap(userData);
// 调用Kotlin方法(替换为你的实际模块名)
com.example.processMap(kotlinMap);

如果需要直接传入键值对,也可以跳过工具函数,直接调用mapOf:

const kotlinMap = kotlin.collections.mapOf(["name", "Alice"], ["age", 30]);
com.example.processMap(kotlinMap);

3. 处理可变Map(MutableMap)

如果你的Kotlin方法接收的是MutableMap<K, V>,只需把工具函数中的mapOf换成mutableMapOf即可:

function createKotlinMutableMap(jsObject) {
    return kotlin.collections.mutableMapOf(...Object.entries(jsObject));
}

注意事项

  • 确保Kotlin多平台项目的JS编译产物已正确引入到你的JS环境中,kotlin.collections命名空间可以正常访问。
  • 键值对的类型必须和Kotlin方法声明的类型匹配,比如Kotlin期望Map<String, Int>,就不要传递字符串类型的值,避免类型不兼容报错。

内容的提问来源于stack exchange,提问作者Konstantin Tarashchanskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:43:31