为何使用export =导出时需用import module = require("module")导入?
为什么
export =必须搭配import module = require("module")使用 核心原因是TypeScript为了兼容CommonJS模块系统,同时解决ES模块语法无法覆盖的特定场景:
对应CommonJS的导出逻辑:
export =本质是直接替换整个module.exports对象(这是CommonJS的核心导出方式),而ES标准的import语法(比如import x from 'xxx'或import {x} from 'xxx')是针对ES模块的命名/默认导出设计的,没法直接映射“替换整个导出对象”这种行为。import = require()就是TS专门用来对应CommonJS里const module = require('module')的语法,能准确拿到export =导出的全部内容。消除导出歧义:比如你用
export =导出一个单独的函数或类,这时候如果用ES的import语法,TS没法区分你是要导入默认导出,还是整个模块对象。而import = require()直接明确了“把模块导出的全部内容赋值给这个变量”,不会有歧义。历史兼容需求:TS刚诞生时,ES模块还没成为主流,大部分npm包都是CommonJS格式。为了让TS代码能顺畅调用这些CommonJS库,同时保留TS的类型检查能力,就设计了这对语法来桥接TS模块系统和CommonJS生态。
内容的提问来源于stack exchange,提问作者weilueluo
相关产品推荐
相关产品推荐

