Использование типов чисел без знака с Javascript бэкэндом - PullRequest
1 голос
/ 06 марта 2020

Я хотел бы использовать Kotlin типы чисел без знака с Javascript бэкэндом; то есть я хотел бы написать Kotlin код с использованием UByte и скомпилировать его в JS.

. Я написал следующую тестовую программу:

@kotlin.ExperimentalUnsignedTypes
fun main(args: Array<String>) {
    val x : UByte = 1u
    println(x)
}

I может скомпилировать и запустить его без проблем с бэкэндом JVM:

$ kotlinc-1.3.70/bin/kotlinc hello.kt -include-runtime -d hello.jar
$ java -jar hello.jar 
1

Но если я скомпилирую его в Javascript и попытаюсь загрузить вывод в браузер, произойдет сбой:

$ kotlinc-1.3.70/bin/kotlinc-js hello.kt -output hello.js
<html>
  <head>
    <title>Unsigned</title>
    <script src="kotlin.js"></script>
    <script src="kotlin.meta.js"></script>
    <script src="hello.js"></script>
  </head>
  <body>
  </body>
</html>

Я даже не пытаюсь позвонить hello.main, это уже не удается при загрузке страницы:

Uncaught TypeError: UByte is not a constructor
    at main (hello.js:8)
    at hello.js:12
    at hello.js:15

В случае, если это помогает, сгенерированный JS выглядит следующим образом:

if (typeof kotlin === 'undefined') {
  throw new Error("Error loading module 'hello'. Its dependency 'kotlin' was not found. Please, check whether 'kotlin' is loaded prior to 'hello'.");
}var hello = function (_, Kotlin) {
  'use strict';
  var UByte = Kotlin.kotlin.UByte;
  var println = Kotlin.kotlin.io.println_s8jyv4$;
  function main(args) {
    var x = new UByte(1);
    println(x);
  }
  _.main_kand9s$ = main;
  main([]);
  Kotlin.defineModule('hello', _);
  return _;
}(typeof hello === 'undefined' ? {} : hello, kotlin);

Чего мне не хватает для работы с UByte и соавт. в Kotlin код, который компилируется в Javascript?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...