角度 2 FileSaver.js

Angular2 FileSaver.js

我将 FileSaver.js 与 angular 2 一起使用,效果很好;但是,我的构建中出现语义错误:

error TS2304: Cannot find name 'saveAs'

我正在使用 angular 2 种子并将库添加到我的 project.config 中,如下所示:

this.NPM_DEPENDENCIES = [
      ...this.NPM_DEPENDENCIES,
{src: 'file-saver/FileSaver.min.js', inject: true},

    ];


this.SYSTEM_CONFIG_DEV.paths['file-saver'] =
        `${this.APP_BASE}node_modules/file-saver/FileSaver`;

    this.SYSTEM_BUILDER_CONFIG.packages['file-saver'] = {
      main: 'FileSaver.js',
      defaultExtension : 'js'
    };

我可以在我的组件中使用 saveAs:

downloadFile(data: any){

        var blob = new Blob([data], { type: 'text/csv' });

        //saveAs is a function in the FileSaver.js library https://github.com/eligrey/FileSaver.js
        saveAs(blob, "results.csv");
    }

问题是语义错误导致我的构建在推送到我的云环境时失败。

我尝试通过以下方式添加输入:

npm i @types/file-saver

这允许我导入:

import { saveAs } from 'file-saver';

但是,这给了我错误:

h.saveAs is not a function

其实刚刚想通了。我需要声明变量以便打字稿使用它:

declare var saveAs:any;

其他解决方案是安装 FileSaver 类型的包

npm install --save @types/filesaver

由于 TSConfig 默认在目录 @types/* 中查找类型,它会在您的整个 code/application.

中自动识别

由于 FileSaver 没有任何类型,我使用了以下方法。

对于 Typescript 1.8 您可以使用

导入
  1. 从下面 link 下载 FileSaver.js 并保存在我的项目目录中。

https://github.com/eligrey/FileSaver.js/blob/master/FileSaver.js

2.Then 在我想使用 FileSaver 的组件中,我加载了保存的 FileSaver.js 并使用

分配了对它的引用

let fileSaver = require('../../assets/js/FileSaver');

在我导入之后。

现在我想使用 FileSaver 保存文件的任何地方,我都会使用

调用它

fileSaver.saveAs(blob, fileName);

但是,对于 Typescript 2.x,您可以使用

导入
import * as filesaver from '../../assets/js/FileSaver';

并将其用作:

fileSaver.saveAs(blob, fileName);