我有一个使用Common JS模块和System JS加载器的Typescript 2.0项目。我使用Visual Studio代码作为IDE。我在项目中使用外部库(filesaver JS)时遇到问题。
我通过npm安装了library和type definition。两者都分别出现在我的node_modules和node_module / @类型中。
如何在我的函数中引用(导入)我的TypeScript代码中的filesaver saveAs函数来保存blob(转换为JSON字符串的对象)?
我尝试了几种导入方式,但它们似乎都不适用于我。我得到'index.d.ts'不是模块错误,或'模块未找到'错误。
以下是我的尝试:
import filesaver = require('FileSaver'); //error: index.d.ts is not a module
import {FileSaver} from 'file-saver'; //error: cannot find module file-saver
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": false,
"removeComments": true,
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es6", "es2015", "dom"],
"sourceMap": true,
"pretty": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitUseStrict": false,
"noFallthroughCasesInSwitch": true,
"typeRoots": [
"./node_modules/@types",
"./node_modules"
],
"types": [
"node"
]
},
"exclude": [
"node_modules",
"dist",
"src"
],
"compileOnSave": false
}
答案 0 :(得分:2)
我在使用System JS模块加载器的Angular 2项目中遇到了同样的问题。 对我来说
k = dict((key, dictionary[key]) for key in i)
工作,但只有在我明确地将文件保护程序的模块格式设置为System JS配置中的cjs之后:
import {saveAs} from 'file-saver';
据我所知,SystemJS默认将文件保护程序识别为AMD模块。也许在文件保护程序中AMD模块定义有问题,但我对此并不十分了解。 (另见https://github.com/eligrey/FileSaver.js/blob/master/FileSaver.js#L182)
答案 1 :(得分:0)
这可能不是完美的解决方案,但以下三行适用于IE 11和Chrome。
var saveAs = require('file-saver');
var blob = new Blob([JSON.stringify(myDataObject)], { type: 'text/plain;charset=utf-8' });
saveAs(blob, "file.txt");