1

我的问题是关于在 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 表示上面的配置结构?有没有一种简单的方法来处理结构/json Kotlin 方面?我们可以以某种方式声明该结构是动态的吗?使用 Kotlin 对象没有帮助。

4

1 回答 1

1

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

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

external interface QueryHolder {
   var Query: BookProcessor
}

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

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

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

Dukat 是 Kotlin/JS 团队专门为此创建的工具,目前正在为提高该工具的质量而奋斗。以下是在您的特定情况下会生成的内容:

external interface `T$0` {
    var books: () -> Array<Any>
}

external interface `T$1` {
    var Query: `T$0`
}

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

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

于 2020-05-04T16:38:30.523 回答