在Angular /客户端项目中使用转译为JavaScript的Kotlin代码

时间:2019-03-19 22:46:17

标签: javascript angular 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(我们尝试过plainumdamd),我们的方法名称似乎在JavaScript文件中具有奇/乱码的后缀:

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

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

我的插件配置或我在项目中包含此JavaScript文件的方式有问题吗?我们到那儿已经走了99%,但是最后(奇怪)的障碍阻碍了我们前进。

1 个答案:

答案 0 :(得分:1)

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

在这种情况下:

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

然后将其编译为:

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