首页 > 解决方案 > 在 Angular/客户端项目中使用转换为 JavaScript 的 Kotlin 代码

问题描述

我们有一个 Kotlin 项目,其中一些类旨在与客户端共享,因此我们配置了kotlin-maven-plugin将某些 Kotlin 类作为 JavaScript 输出:

    <configuration>
        <outputFile>${project.basedir}/angular/src/assets/kotlin_classes.js</outputFile>
        <moduleKind>commonjs</moduleKind>
    </configuration>

使用如下所示的 Kotlin 类:

class SomeKotlinClass {
    fun someMethod(name: String): String {
        return "Happy Birthday, " + name;
    }
}

我们遇到的问题是,无论moduleKind我们使用什么(我们尝试过plain, umd, amd),我们的方法名称在 JavaScript 文件中似乎都有一个奇怪/乱码的后缀:

  SomeKotlinClass.prototype.someMethod_6q3v0v$ = function (name) {
    return 'Happy Birthday, ' + name
  };

这意味着我们在 Angular/TypeScript 中的调用不能是 to someMethod(),它们必须是 to someMethod_6q3v0v$(),这对我们不起作用。

我的插件配置有问题,还是我在项目中包含这个 JavaScript 文件的方式有问题?我们已经完成了 99% 的工作,但最后一个(奇怪的)障碍阻碍了我们。

标签: javascriptangularkotlin

解决方案


Javascript中编译方法的名称可以使用@JSName(...)注解来设置。

在这种情况下:

class SomeKotlinClass {
    @JsName("someMethod")
    fun someMethod(name: String): String {
        return "Happy Birthday, " + name;
    }
}

然后编译为:

SomeKotlinClass.prototype.someMethod = function (name) {
   return 'Happy Birthday, ' + name;
};

推荐阅读