我正试图用新的tsickle/闭锁链来编写一个有角度的项目。然而,它似乎不得不在所有枚举中出现以下错误:
src/path/to/YourEnumType.ts:1:错误导出必须是模块顶层的语句
我的代码是:
export enum YourEnumType {
None = 0,
OneThing = 1,
OtherThing = 2
}我该如何处理这个问题?
发布于 2017-11-23 18:15:33
类型记录编译器从导出的枚举中生成以下内容:
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。
深入研究类型记录编译器,尝试使用其生成的输出格式,等等,我找不到解决这个问题的方法。尽管如此,如果像我们在这答案中所看到的那样,编译这个类型文本代码会好得多:
var YourEnumType = Object.freeze({"None":1, "OneThing":2, "OtherThing":3, ...});不幸的是,打字本不能做到这一点。
在Google闭包编译器显示中也有类似的发现,如果不修改Google闭包源代码,就无法解决这个问题。
因此,考虑到这一点,以及整个打字世界中存在的其他主要问题,我认为唯一的出路是避免使用打字本。
发布于 2018-06-24 11:38:57
如果您将export拉到一个单独的行,那么它就能工作。即:
enum YourEnumType {
None = 0,
OneThing = 1,
OtherThing = 2
}
export {YourEnumType};看上去像是沙克里的虫子。
Update:另外,由于您使用了一个小型化器,您应该考虑const,它发出的代码较少,在与闭包一起使用时有更少的角情况:
const enum YourEnumType {
None = 0,
OneThing = 1,
OtherThing = 2
}
export {YourEnumType};https://stackoverflow.com/questions/47461441
复制相似问题