导出的枚举不会使用tsickle / closure进行编译

时间:2017-11-23 18:15:33

标签: angular enums google-closure-compiler tsickle

我正在尝试用新的tsickle / closure链编译一个角度项目。但是,它似乎必须在所有枚举上跟随错误:

  

src / path / to / YourEnumType.ts:1:错误 - 导出必须是模块顶层的语句

我的代码是:

export enum YourEnumType {
    None = 0,
    OneThing = 1,
    OtherThing = 2
}

我该如何处理这个问题?

2 个答案:

答案 0 :(得分:0)

Typescript编译器从导出的枚举中生成:

var YourEnumType;
(function (YourEnumType) {
    YourEnumType[YourEnumType["None"] = 0] = "None";
    YourEnumType[YourEnumType["OneThing"] = 1] = "OneThing";
    YourEnumType[YourEnumType["OtherThing"] = 2] = "OtherThing";
})(YourEnumType = exports.YourEnumType || (exports.YourEnumType = {}));

我们可以看到,是的,这个生成的Javascript使用函数内部的exports

深入研究打字稿编译器,尝试使用其生成的输出格式等等,我发现无法解决这个问题。尽管如此,如果我们可以在this回答中看到它编译,那么这个Typescript代码会好得多:

var YourEnumType = Object.freeze({"None":1, "OneThing":2, "OtherThing":3, ...});

不幸的是,打字稿不会这样做。

谷歌关闭编译器show中的类似挖掘,没有修改谷歌闭包源代码就无法解决这个问题。

因此,考虑到这一点,以及整个打字稿世界中枚举的其他主要问题,我认为唯一的出路是避免使用打字稿枚举。

答案 1 :(得分:0)

如果将ni file.xt -type file 拉到单独的一行,则它可以工作。即:

export

好像是一个敲响的小虫。

更新:此外,由于使用了缩小符,因此应考虑使用const枚举,该枚举发出的代码更少,并且与闭包一起使用时遇到的拐角案例也更少:

enum YourEnumType {
    None = 0,
    OneThing = 1,
    OtherThing = 2
}
export {YourEnumType};