抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

在 Kotlin 里面引用 TypeScript 函数,然后还有一些其他常用的东西

基本

@JsModule("YourModule")是 extern 的核心,这里面你的 module 一定是要直接有代码的,类似

1
2
3
declare namespace {
...
}

而不是

1
2
3
import {xx} from 'YourModule'

export {xx}

否则会出现找不到 Module 的问题

Mapping

一个例子即可说完, 假设这里是 @package.xxx, 里面有

1
2
3
4
5
6
7
8
9
10
11
12
declare type T = 'Ka' | 'g' | number

declare namespace X {
const A: number;
interface B {
something: T
getB(par1: '类型体操'|'没想到吧'|'但都是string', par2: (cap: number) => void): B
}
enum E {
E1 = 114514
}
}

-> Kotlin

1
2
3
4
5
6
7
8
9
10
11
@JsModule("@package.xxx")
external object X {
val A: Number
object B {
var something: dynamic // 复杂类型
fun getB(par1: String, par2: (Number)->Nothing): B
}
sealed class E {
object E1: E
}
}

Js Object

使用 Kotlin.js.json

文档

注意:是 Json,不是全大写的那个

创建

1
2
3
4
5
6
json(
"A" to 114,
"B" to json(
"BB" to 514
)
)

=

1
2
3
4
5
6
{
A: 114,
B: {
BB: 514
}
}

get/set

这个,详情见源码注释

1
2
3
public operator fun get(propertyName: String): Any?

public operator fun set(propertyName: String, value: Any?): Unit

使用 Map (Kotlin 2.0+)

原理:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries

1
2
3
4
5
6
val jsonMap: MutableMap<String, dynamic> = mutableMapOf()
// jsonMap 相关操作
val json = mapToJson(jsonMap.asJsMapView())


fun mapToJson(entries: JsMap<String, dynamic>): dynamic = js("Object.fromEntries(entries)")