【问题标题】:Kotlin JavaScript to TypeScript Definition FileKotlin JavaScript 到 TypeScript 定义文件
【发布时间】:2017-03-01 17:00:09
【问题描述】:

我找到了ts2kt library,它将从任意.d.ts 文件创建Kotlin 头文件。但是,我想往相反的方向走。

我想构建一个可以编译为 JavaScript 的 Kotlin 库,但我想从 TypeScript 中使用它。 有没有办法让 Kotlin 从其生成 .d.ts 文件暴露的接口?我是否以正确的方式处理这个问题?

【问题讨论】:

  • kotlin 不会像 typescript 那样将 1-to-1 映射到 javascript,即使存在这样的工具,kotlin 类型也不会一直代表生成的 javascript
  • AFAIK 这样的工具还不存在(还)

标签: javascript typescript kotlin


【解决方案1】:

In Kotlin 1.4-M1 support for exporting TypeScript definitions was added

预览:TypeScript 定义

我们很高兴展示的新 Kotlin/JS IR 编译器的另一个功能是从 Kotlin 生成 TypeScript 定义 代码。 JavaScript 工具和 IDE 可以在以下情况下使用这些定义 致力于混合应用程序以提供自动完成,支持静态 分析器,并使其更容易在 JS 和 TS 中包含 Kotlin 代码 项目。

对于配置为使用produceExecutable() 的项目中标有@JsExport(见上文)的顶级声明,一个.d.ts 文件与 将生成 TypeScript 定义。对于上面的 sn-p,他们 看起来像这样:

// [...]
namespace blogpost {
    class KotlinGreeter {
        constructor(who: string)
        greet(): string
    }
    function farewell(who: string): string
}
// [...]

在 Kotlin 1.4-M1 中,这些声明可以在 build/js/packages/<package_name>/kotlin 中找到,旁边是相应的, 未打包的 JavaScript 代码。请注意,由于这只是一个 预览,默认情况下它们不会添加到分布文件夹中 现在。您可以期待这种行为在未来发生变化。

【讨论】:

    【解决方案2】:

    我希望做这样的事情来在 Android 和 JS 之间共享模型。有 ts-generator 库,它接受 jvm 类并从中生成 ts 定义。

    我还没有尝试过,但理论上它应该可以工作。将您的库的 API(或 api 实现的接口)分离为 kotlin common module。然后可以将api编译成jvm模块,通过ts-generator运行生成ts定义。

    也许有一个聪明的方法可以跳过编译到 jvm 以生成 ts 定义。

    【讨论】:

    • 如果您正在寻找一种简单的方法来尝试 ts-generator,请查看ktsgenerator Gradle 插件
    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 2018-04-09
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2016-09-11
    相关资源
    最近更新 更多