如何从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
相关产品推荐
相关产品推荐

