如何处理 sweet.js 重命名 Typescript 输出中的顶级变量?

What to do about sweet.js renaming top-level variables in Typescript output?

Typescript 编译

class ClassName { }

var ClassName = function () {
    function ClassName() {
    }
    return ClassName;
}();

我 运行 JS 代码通过 sweet.js,即使没有定义宏,也会产生如下内容:

var ClassName9 = function () {
    function ClassName3() {
    }
    return ClassName3;
}();

我知道如果未使用顶级 var,或者如果构造函数使用了不同的名称,sweet.js 将不会重命名第一次出现的 ClassName函数,但做这些事情的是 Typescript 编译器,而不是我。

为什么会出现问题

  1. 我无法再在 HTML 文件中使用 ClassName。这不是我经常想做的事情,当然我可以在没有能力的情况下做,但我仍然怀念拥有它。
  2. 到目前为止我想使用的宏不需要任何卫生重命名。但现在看来我必须使用自己的脚本撤消重命名。源映射不会轻易提供帮助,因为我已经需要用于打字稿 --> javascript 转换的源映射。

我的问题

有没有办法在 sweet.js 中禁用卫生重命名?有没有更好的方法来处理这个问题?

Is there a way to disable hygienic renaming in sweet.js?

没有

Is there a better way to deal with this issue?

不确定。作为 hack,您可以 post-使用脚本处理文件 搜索 ClassName$xxx 然后添加

var ClassName = ClassName$xxx;

按照@AnthonyCalandra 的建议,将 --readable-names 标志与 sjs 一起使用,解决了我的问题。