PixiJS(或更确切地说,Resource Loader)在加载函数的回调中返回一个形状如下的JS对象:
{
"resource-you-asked-for.png": {
url: "foo.png",
error: <optional error>,
data: <binary data>
},
"second-resource.png": { ... }
}
我的问题是...如何在Kotlin.js中对此建模?我不能只说这是一个Map<String, LoaderResult>
,然后Kotlin会尝试使用get
(实际上是一个经过伪装的get
)对其进行索引。而且我显然不能继承dynamic
。
建议?
答案 0 :(得分:0)
像Map一样的JavaScript对象可以在Kotlin中以external interface的形式使用,扩展名为get
和set
运算符:
external interface ResourceDictionary
inline operator fun ResourceDictionary.get(name: String): LoaderResult? =
this.asDynamic()[name]
inline operator fun ResourceDictionary.set(name: String, result: LoaderResult?) {
this.asDynamic()[name] = result
}
类似于类的JavaScript对象在Kotlin中用作external class
external open class LoaderResult {
var url: String
var data: ByteArray
var error: Error?
}
您还可以使用ts2kt工具转换TypeScript定义:
$ npm install -g ts2kt
$ ts2kt index.d.ts
然后您将能够在external interface ResourceDictionary
中找到external open class Resource
和pixi.PIXI.loaders.kt
: