Javascript представление структуры с использованием Kotlin JS - PullRequest
1 голос
/ 27 апреля 2020

Мой вопрос касается создания javascript структуры внутри KotlinJS и использования их для вызова внешних модулей. Допустим, у нас есть следующий код 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 сбоку? Можем ли мы как-то объявить эту структуру как Dynami c? Использование Kotlin объектов не помогает.

1 Ответ

1 голос
/ 04 мая 2020

На данный момент вы должны представить интерфейс и его реализацию, так что это будет примерно так:

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

external interface QueryHolder {
   var Query: BookProcessor
}

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

Для более сложных структур это может легко стать проблемой. Вот что можно сделать для автоматизации таких переводов. Вы можете:

  • сгенерировать объявление машинописи для этого кода с помощью компилятора машинописи (используя tsc -d)
  • сгенерировать 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`
}

Что далеко не оптимально - например, имя сгенерированных сущностей - это то, что мы не хотели поощрять людей к повторному использованию, но чем больше оно идет Тем более это выглядит как ошибка (которую мы исправим так или иначе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...