以前我可以做:
import foo = require('foo');
但是现在TypeScript(1.5)支持es6模块语法,在ES6模块语法中实现相同功能的正确方法是什么。
正确的方法是继续使用旧的导入语法。新的导入语法仅适用于ES模块,而旧的导入语法仅适用于ES6之前的模块。两者是截然不同的,有意如此。 import * as foo from 'foo' 导入模块’foo’的所有 属性 , 而不导入默认值foo。
import * as foo from 'foo'
foo
来自功能的设计者:
export default
__esModule
export =
module.exports
import x = require("foo")
更新: TypeScript编译器在某个时候开始允许import * as foo from 'legacy-module- foo'在某些情况下获取旧版模块的默认导入。 这违反了ES6规范 (第15.2.1.16节, “值“ *”表示导入请求是针对目标模块的 名称空间对象。“)。
import * as foo from 'legacy-module- foo'
当您以这种方式导入的旧版模块更新为ES6模块时,这些模块的“默认”导入将停止工作(因为* as foo导入 应该 是在导入名称空间对象),如果您不知道这样做,可能会造成极大的混乱这是一个TypeScript / SystemJS hack。将来TypeScript对ES规范的重新调整也有可能导致它们中断。
* as foo
因此,您可能更希望继续使用上述的旧版导入语法来加载旧版模块,以避免使您自己和其他开发人员就您的代码对ES6名称空间导入的工作方式感到困惑,并避免使变更令人困惑。