Порт Java-модуль для JS с JSweet

Я хотел бы преобразовать эти функции Java в JavaScript: CircleFitter.java. Мне не нужны части для чтения файлов.

JSweet кажется хорошим вариантом. Итак, я попытался вставить содержимое файла Java в онлайн-песочницу JSweet, но получаю следующие ошибки:

Line 58: module 'java.io' has no exported member 'FileReader'
Line 58: property 'FileReader' does not exist on type 'typeof io'
Line 58: module 'java.text' has no exported member 'DecimalFormat'
Line 58: property 'DecimalFormat' does not exist on type 'typeof text'
Line 58: module 'java.text' has no exported member 'DecimalFormatSymbols'
Line 58: property 'DecimalFormatSymbols' does not exist on type 'typeof text'
Line 58: module 'java' has no exported member 'awt'
Line 58: property 'awt' does not exist on type 'typeof java'
Line 69: property 'in' does not exist on type 'typeof System'
Line 76: property 'exit' does not exist on type 'typeof System'
Line 125: property 'exit' does not exist on type 'typeof System'
Line 128: property 'exit' does not exist on type 'typeof System'

Эти ошибки, кажется, делятся на 2 категории:

  1. модуль __ не имеет экспортированного члена __
  2. свойство __ не существует для типа __

Я не использую Java, поэтому понятия не имею, как их обойти. Я ценю помощь.

1 ответ

JSweet имеет ограниченную поддержку API Java. В "песочнице" используется библиотека эмуляции j4ts, которая не обеспечивает реализацию ни пакета java.text, ни java.io. Он также не поддерживает System.exit (потому что большую часть времени он не имеет смысла в браузере). Наконец, любая поддержка java.awt чрезвычайно сложна и может быть только очень частичной. Поэтому лучше всего избегать использования неподдерживаемых API-интерфейсов Java и заменять их API-интерфейсами JavaScript (JSweet предоставляет к ним доступ).

Однако с помощью JSweet можно скомпилировать некоторые библиотеки Java в TypeScript/JavaScript. Организация J4TS предоставляет несколько примеров того, как компилировать и поддерживать некоторые библиотеки Java. Если ваша программа использует неподдерживаемые библиотеки, у вас есть несколько вариантов решения проблем:

  • переписать / перепроектировать вашу программу, чтобы удалить зависимости, которые не поддерживаются
  • при этом вы можете использовать аннотацию @jsweet.lang.Erased для методов и полей, чтобы исключить некоторый код из перевода (если вы вообще не хотите изменять свой код, вы можете определить эти аннотации в файле jsweetconfig.json)
  • внести свой вклад в J4TS, чтобы добавить поддержку API, которые вы хотите использовать
  • в JSweet v2 напишите расширение JSweet для собственной поддержки новых API.

JSweet v2 еще не выпущен, но он предоставляет API для расширения транспилятора и собственной поддержки большего количества API. Я советую использовать его при наличии.

Другие вопросы по тегам