使用JSweet

时间:2017-06-14 01:45:34

标签: javascript java typescript transpiler jsweet

我想将这些Java函数转换为JavaScript:CircleFitter.java虽然我不需要文件阅读部分。

JSweet似乎是个不错的选择。所以,我尝试将java文件的内容粘贴到online JSweet sandbox中,但是我收到了这些错误:

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'

这些错误似乎分为两类:

  1. 模块__没有导出的成员__
  2. 类型__ 上不存在
  3. 属性__

    我不使用Java,所以我不知道如何解决这些问题。我很感激帮助。

1 个答案:

答案 0 :(得分:1)

JSweet对Java API的支持有限。沙箱使用j4ts仿真库,它不提供java.text包的任何实现,也不提供java.io.它也不支持System.exit(因为它在大多数时候在浏览器中没有意义)。最后,对java.awt的任何支持都非常困难,而且只能是非常局部的。因此,最好的方法是避免使用不受支持的Java API并将其替换为JavaScript API(JSweet提供对它们的访问)。

但是,使用JSweet,可以将一些Java库编译为TypeScript / JavaScript。 J4TS organization提供了一些关于如何编译和支持某些Java库的示例。如果您的程序使用不受支持的库,则有几种方法可以解决问题:

  • 重写/重新设计程序以删除不受支持的依赖项
  • 这样做,您可以在方法和字段上使用@ jsweet.lang.Erased注释从转换中排除一些代码(如果您根本不想修改代码,可以在jsweetconfig中定义这些注释) .json文件)
  • 有助于J4TS添加对您要使用的API的支持
  • 使用JSweet v2,编写一个JSweet扩展来本机支持新的API。

JSweet v2尚未发布,但它提供了一个API来扩展转换器并本地支持更多API。我建议在可用时使用它。