我从打字稿3转到了4,在我想了解的输出中有一些奇怪的变化。大多数JS输出文件的顶部都有新插入的exports.name =void0代码:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.blah = exports.blah2 = void 0;
var something_1 = require(".something");在blah()函数定义之后的文件中,仍然存在exports.blah = blah;我最好的猜测是,在加载和解析其他模块时强制导出为null的策略是在模块启动依赖项上崩溃。
另一个改变是对其他模块的调用正在被转换到(0,module_1.function)(.)以前只有module_1.function(.)而且工作得很好。我想知道新的JS在旧计算机上是否运行良好,或者为什么旧代码看起来很好。
发布于 2022-01-22 22:33:55
“设置为void 0”(undefined)是因为模块导出的名称必须是可见的,即使它们的初始化器尚未运行(它们是悬挂的,如var声明)。
当存在循环导入时,这会产生影响,例如:
import * as self from './modulename' // Where this file is "modulename.ts"
export const v = 'a' in self // Should be "true"
export const a = 0(0, module_1.function)(args)而不仅仅是module1.function(args)的原因是,在调用函数时,this应该是undefined,而第二个则是以this作为module1调用函数。
这只会打破依赖"this“作为模块的旧代码。但是这段代码已经被破坏了,因为这本来就不应该起作用。
https://stackoverflow.com/questions/70543122
复制相似问题