首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导出枚举不会使用tsickle/闭包进行编译。

导出枚举不会使用tsickle/闭包进行编译。
EN

Stack Overflow用户
提问于 2017-11-23 18:15:33
回答 2查看 222关注 0票数 0

我正试图用新的tsickle/闭锁链来编写一个有角度的项目。然而,它似乎不得不在所有枚举中出现以下错误:

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

我的代码是:

代码语言:javascript
复制
export enum YourEnumType {
    None = 0,
    OneThing = 1,
    OtherThing = 2
}

我该如何处理这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-23 18:15:33

类型记录编译器从导出的枚举中生成以下内容:

代码语言:javascript
复制
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

深入研究类型记录编译器,尝试使用其生成的输出格式,等等,我找不到解决这个问题的方法。尽管如此,如果像我们在答案中所看到的那样,编译这个类型文本代码会好得多:

代码语言:javascript
复制
var YourEnumType = Object.freeze({"None":1, "OneThing":2, "OtherThing":3, ...});

不幸的是,打字本不能做到这一点。

在Google闭包编译器显示中也有类似的发现,如果不修改Google闭包源代码,就无法解决这个问题。

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

票数 0
EN

Stack Overflow用户

发布于 2018-06-24 11:38:57

如果您将export拉到一个单独的行,那么它就能工作。即:

代码语言:javascript
复制
enum YourEnumType {
    None = 0,
    OneThing = 1,
    OtherThing = 2
}
export {YourEnumType};

看上去像是沙克里的虫子。

Update:另外,由于您使用了一个小型化器,您应该考虑const,它发出的代码较少,在与闭包一起使用时有更少的角情况:

代码语言:javascript
复制
const enum YourEnumType {
    None = 0,
    OneThing = 1,
    OtherThing = 2
}
export {YourEnumType};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47461441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档