以前我可以这样做:
import foo = require('foo');但是现在TypeScript (1.5)支持es6模块语法,在ES6模块语法中实现相同的正确方法是什么。
发布于 2015-04-13 05:28:27
正确的方法是继续使用旧的导入语法。新的导入语法仅适用于ES模块,旧的导入语法仅适用于预ES6模块。这两者是不同的,故意的。import * as foo from 'foo' 导入模块'foo‘的所有属性,它不将默认值导入为
export default始终具有ES模块语义。为了与Babel兼容,当模块具有默认导出时,我们可以随意地发出一个__esModule标记,但实际上我们不会将该标记用于任何事情。export =声明代替要导出的另一个实体来代替模块本身,它总是作为对module.exports的赋值发出。在使用export =的模块中有其他导出是错误的。这是现有的TypeScript行为。export =导出另一个模块(无论是内部模块还是外部模块)的模块可以使用新的ES6结构导入。特别是,这些模块可以使用方便的析构导入。使用export =导出另一个模块的模式在提供内部模块(例如angular.d.ts)的CommonJS/AMD视图的.d.ts文件中很常见。export = import x = require("foo") 来导出非模块实体而不是模块本身的模块必须使用现有的import x = require("foo")语法导入,就像现在的情况一样。2016更新:在某些情况下,( TypeScript编译器)开始允许import * as foo from 'legacy-module-foo'获得遗留模块的默认导入。--这违反了ES6规范 (第15.2.1.16节,值"*“表示导入请求是针对目标模块的http://www.ecma-international.org/ecma-262/6.0/index.html#sec-module-namespace-objects的)。
当以这种方式导入的遗留模块被更新为ES6模块时,这些模块的“默认”导入将停止工作(因为* as foo导入应该是导入命名空间对象),如果您不知道这样做是一种类型记录/SystemJS攻击,这可能会非常混乱。也有可能未来的TypeScript调整到ES规范会导致它们中断。
因此,您可能更倾向于继续使用上面描述的遗留导入语法来加载遗留模块,以避免让您自己和其他开发人员对ES6名称空间导入的工作方式感到困惑,并避免混淆最新的更改。
发布于 2015-04-13 01:39:38
ES6模块语法的对应语法是:
import * as foo from 'foo';基本上,将所有内容从foo模块导入到一个名为foo的局部变量中。
发布于 2018-03-13 15:26:25
在TypeScript 2.7中,有一个新的esModuleInterop标志,它可以使用CommonJS/AMD/UMD启用默认导入。通过在您的true中将该标志设置为tsconfig.json,这将如预期的那样工作:
import foo from 'foo';https://stackoverflow.com/questions/29596714
复制相似问题