Javascript 使用 Kotlin JS 的结构表示

Javascript structure representation using Kotlin JS

我的问题是关于在 KotlinJS 中创建 javascript 结构并使用它们调用外部模块。 假设我们有以下 js 代码,我们想将其翻译成 KotlinJS。

const config = {
defs : "something",
resolvers : {
  Query: {
    books: () => []
  }}
};

myFunction(config) // This can be any kind of external js function that accepts the above structure

我们如何使用 Kotlin JS 表示上面的配置结构?有没有一种简单的方法来处理 structures/json Kotlin 端?我们能否以某种方式将该结构声明为动态的? 使用 Kotlin 对象没有帮助。

到现在为止,你必须介绍接口及其实现,所以它会是这样的:

external interface ConfigInterface {
  var defs: String,
  var resolvers: QueryHolder
}

external interface QueryHolder {
   var Query: BookProcessor
}

external interface BookProcessor {
   var books: () -> Array<Any>
}

对于更复杂的结构,它很容易成为一个挑战。 以下是自动化此类翻译的方法。 您可以:

  • 使用 typescript 编译器(使用 tsc -d)为此代码生成 typescript 声明
  • 使用 dukat 生成 kotlin 声明。

Dukat 是 Kotlin/JS 团队专门为此创建的工具,ongoing battle 用于提高此工具的质量。以下是在您的特定情况下会生成的内容:

external interface `T[=11=]` {
    var books: () -> Array<Any>
}

external interface `T` {
    var Query: `T[=11=]`
}

external object config {
    var defs: String
    var resolvers: `T`
}

这远非最佳 - 例如生成的实体的名称是我们不想鼓励人们重复使用的东西,但它越多,它看起来就越像一个错误(我们将以这种方式修复或其他)。