【发布时间】:2021-07-15 09:41:54
【问题描述】:
我有这个 TS 代码:
export namespace Constants
{
export var x = 0;
}
如果我用 'tsc' 编译它,我会得到这个 JS 代码:
"use strict";
exports.__esModule = true;
exports.Constants = void 0;
var Constants;
(function (Constants) {
Constants.x = 0;
})(Constants = exports.Constants || (exports.Constants = {}));
我的问题是。为什么 'tsc' 将命名空间编译为 IIFE 而不是像这样简单且可读性更高的对象?
var Constants = {};
Constants.x = 0;
有什么特别的原因吗?
这里有other questions similar。除了他们没有给出任何真实的答案。这个问题的不同之处在于,命名空间只是一个用于隔离代码的简单容器,因此它必须尽可能简单易读,而 IIFE 并不是最好的解决方案。
【问题讨论】:
-
@MarioSantini 这个问题给出的生成的 ES5 代码是完美的。没有一个角色可以改变。显然,TypeScript 团队关心生成的代码。
-
@Paleo 我删除了我的评论并做出了回答,因为太长了。我希望它更有意义。
标签: javascript typescript namespaces iife