首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从类型记录3到4,新的export.somename =void0在JS输出和new (0,module_1.function)中的目的是什么?

从类型记录3到4,新的export.somename =void0在JS输出和new (0,module_1.function)中的目的是什么?
EN

Stack Overflow用户
提问于 2021-12-31 14:15:18
回答 1查看 149关注 0票数 1

我从打字稿3转到了4,在我想了解的输出中有一些奇怪的变化。大多数JS输出文件的顶部都有新插入的exports.name =void0代码:

代码语言:javascript
复制
"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在旧计算机上是否运行良好,或者为什么旧代码看起来很好。

EN

回答 1

Stack Overflow用户

发布于 2022-01-22 22:33:55

“设置为void 0”(undefined)是因为模块导出的名称必须是可见的,即使它们的初始化器尚未运行(它们是悬挂的,如var声明)。

当存在循环导入时,这会产生影响,例如:

代码语言:javascript
复制
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“作为模块的旧代码。但是这段代码已经被破坏了,因为这本来就不应该起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70543122

复制
相关文章

相似问题

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