Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Angular/客户端项目中使用传输到JavaScript的Kotlin代码_Javascript_Angular_Kotlin - Fatal编程技术网

在Angular/客户端项目中使用传输到JavaScript的Kotlin代码

在Angular/客户端项目中使用传输到JavaScript的Kotlin代码,javascript,angular,kotlin,Javascript,Angular,Kotlin,我们有一个Kotlin项目,其中一些类打算与客户端共享,因此我们配置了Kotlin maven插件,将某些Kotlin类作为JavaScript输出: <configuration> <outputFile>${project.basedir}/angular/src/assets/kotlin_classes.js</outputFile> <moduleKind>commonjs</moduleKi

我们有一个Kotlin项目,其中一些类打算与客户端共享,因此我们配置了
Kotlin maven插件
,将某些Kotlin类作为JavaScript输出:

    <configuration>
        <outputFile>${project.basedir}/angular/src/assets/kotlin_classes.js</outputFile>
        <moduleKind>commonjs</moduleKind>
    </configuration>
我们遇到的问题是,无论我们使用什么
moduleKind
(我们尝试了
plain
umd
amd
),我们的方法名在JavaScript文件中似乎都有一个奇怪/混乱的后缀:

  SomeKotlinClass.prototype.someMethod_6q3v0v$ = function (name) {
    return 'Happy Birthday, ' + name
  };
这意味着我们在Angular/TypeScript中的调用不能是对
someMethod()
,它们必须是对
someMethod\u 6q3v0v$()
,这对我们不起作用


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

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

在这种情况下:

class SomeKotlinClass {
    @JsName("someMethod")
    fun someMethod(name: String): String {
        return "Happy Birthday, " + name;
    }
}
然后将其编译为:

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

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

在这种情况下:

class SomeKotlinClass {
    @JsName("someMethod")
    fun someMethod(name: String): String {
        return "Happy Birthday, " + name;
    }
}
然后将其编译为:

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

@JsName注释应该可以解决您当前的问题。然而,正如我在博客中所描述的,还有许多其他问题。例如:-使用kotlin类型-生成.d.ts文件-将kotlin生成的代码放入node_modules目录(或资产)我很感兴趣您自己是如何解决这些问题的?@JsName注释应该可以解决您当前的问题。然而,正如我在博客中所描述的,还有许多其他问题。例如:-使用kotlin类型-生成.d.ts文件-将kotlin生成的代码放入node_modules目录(或资产),我想知道您自己是如何解决这些问题的?