Использование кода Kotlin, перенесенного в JavaScript в Angular / клиентском проекте - PullRequest
0 голосов
/ 20 марта 2019

У нас есть проект 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 не могут быть someMethod(), они должны бытьна someMethod_6q3v0v$(), что у нас не работает.

Я что-то не так делаю с конфигурацией моего плагина или с тем, как я включаю этот файл JavaScript в наш проект?Мы на 99% пути, но это последнее (странное) препятствие удерживает нас.

1 Ответ

1 голос
/ 20 марта 2019

Имя скомпилированного метода в Javascript можно установить с помощью аннотации @JSName(...).

В этом случае:

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

, который затем компилируется в:

SomeKotlinClass.prototype.someMethod = function (name) {
   return 'Happy Birthday, ' + name;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...