如何从浏览器控制台访问 GWT 的 JsInterop 导出类型?

How to access GWT's JsInterop exported types from browser console?

我是 运行 GWT 应用程序,我想用 JsInterop 快速测试一些东西。

具体来说,我导出了一个 enum:

package com.mypackage.test

@JsType
enum MyEnum {
    A,
    B,
    C;
}

而且我想在编写任何代码之前检查我是否可以正确访问它。

文档显示如下:

var aClass = new com.gwt.example.MyClass('World');

但是com没有在Window中定义。那么如何在编写代码之前从控制台访问 JsInterop 来测试东西呢?

您是否记得将 -generateJsInteropExports 标志传递给编译器(以及超级开发模式)?没有它,GWT 将不会导出类型,因为这会增加输出大小。

此外,该包看起来不像您期望在 GWT 项目中看到的通常结构(即其中某处的 client,对应于您的 GWT 模块)- 您是否记得参考这个来自您的 .gwt.xml 文件的包?

也有可能这应该是 public - JsInterop 代码默认不显示不可见成员(因为它们不是 public,所以不假定它们被消耗别处)。我不确定这是否适用于类型,或仅适用于成员。


最后,请注意,用 JsType 标记 Java enum 并不能神奇地使它们在 JS 中有意义——在指定的包中会有一个 MyEnum 类型,并且每个静态成员将存在,但它们将是不透明的 JS 对象,而不是字符串或其他您可以轻松与之交互的东西,除非您还在 class 中的方法上添加其他 jsinterop 注释。 J2CL 支持 @JsEnum,它会自动将它们全部转换为数字常量,但这尚未移植到 GWT2。