这种语法是为了兼容非ESModule的模块导入导出语法,目的是,想靠近ESmodule的标准语法-默认导入 import name form 'name'
。
正常export=
用来写第三方模块的声明文件,第三方模块的声明文件一般是UMD模式,为了兼容所有的模块规范。然后 import xxx = require()
用来在应用文件里引用该文件
如果你在tsconfig.json里配置module为非ESModule模式,即:commonjs/amd/umd。那么你在写应用模块时也可以使用 export=
来到出数据,这种模块编译后的代码里,不会添加 Object.defineProperty(exports, "__esModule", { value: true });
。那么到入时候,你可是使用 import xxx require()
也可以使用 import name from 'name'
。
如果你在tsconfig.json里配置module为ESModule模式,即:es2015/es2020/esnext。那么你在写应用模块时,默认到处是必须使用 export default xxx
, 导入时,必须使用 esmodule的导入语法,不能使用import xxx = require()
参考:
Understanding esModuleInterop in tsconfig file
Make auto-imports more likely to be valid for the file (including JS) & project settings
Typescript - 声明文件