我尝试为我的应用导入FileSaver。我让它发挥作用的唯一方法是通过以下命令
import filesaver = require('filesaver');
然后我收到此错误
定位ECMAScript 2015模块时无法使用导入分配
我通过将tsconfig.json中的模块从es6更改为commonjs来遵循解决方案。
现在一切正常。但是,我很担心从es6变为commonjs的后果是什么。显然,出于某种原因这是es6吗?
有没有办法做到这一点,我不必改变?
答案 0 :(得分:3)
是的,如果您使用的是TypeScript,请使用es6 / TypeScript模块加载语法:
import { type } from './module';
将TypeScript编译为JavaScript时,可以定位所需的任何模块加载器:
es6
system
commonjs
AMD
UMD
您可以从tsconfig.json:
定位模块系统"compilerOptions": {
...
"module": "commonjs",
}
浏览器本身尚未支持模块加载。在他们这样做之前,根据您使用的模块系统包含必要的脚本。
例如,如果您定位“system”或“commonjs”,请确保包含兼容的脚本以正确加载模块(即node_modules / systemjs / dist / system.js)
我的建议,如果您在TypeScript中编写ng2应用程序
恕我直言,es6提供了最干净的模块加载语法。我更喜欢使用TypeScript编写Angular2程序并使用es6语言功能(包括清理器模块加载语法)。在将TypeScript编译为JavaScript时,我尝试以es5为目标,因为如今大多数浏览器都提供接近100%的合规性而没有垫片,并使用systemjs作为模块加载器(如果我想稍后更改格式,则最灵活)。
在FileServer代码中,使用TypeScript编写它,并使用es6模块加载语法。这样,它将被编译为您要定位的模块加载器语法,这应该与其余的ts文件保持一致。