kotlin - 建模外部 JS 对象
问题描述
PixiJS(或者更确切地说,Resource Loader),在 load 函数的回调中返回一个形状像这样的 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
而且我显然不能继承。
建议?
解决方案
像 Map 一样的 JavaScript 对象可以在 Kotlin 中用作具有扩展和操作符函数的外部接口: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 open class LoaderResult {
var url: String
var data: ByteArray
var error: Error?
}
您还可以使用ts2kt工具转换 TypeScript 定义:
$ npm install -g ts2kt
- 查找PixiJS的 index.d.ts 文件
$ ts2kt index.d.ts
然后你就可以找到external interface ResourceDictionary
and external open class Resource
in pixi.PIXI.loaders.kt
:
推荐阅读
- spartacus-storefront - 不再可能覆盖斯巴达克斯拦截器?
- android - Viewpager2 在左右预览上滚动不起作用
- php - 如何更改 wordpress docker 映像中的 php max_execution_time?
- django - 循环表单集 Django 的初始数据
- c# - EF 核心 - 在这种情况下最有效的查询
- oracle - 异常处理过程
- django - MxCreateSerializer 类型的对象不是 JSON 可序列化的
- python - AttributeError:模块 'sys' 没有属性 'tracebacklimit'
- routes - 如何让查询参数“type”覆盖PageTypeDecorator设置?
- mysql - 具有两个相同字段的 MySQL 查询