1

我正在使用打字稿处理 AngularJS 项目。我正在尝试使用该js-xlsx库来解析 xlsx 文件,但出现编译错误:

error TS2304: Cannot find name 'XLSX'

我们为所有文件使用全局命名空间,并且由于outFile编译器选项,所有已编译的文件都被连接起来。没有配置模块系统,我们在index.html文件中包含所有 JavaScript 依赖项。因此,我们没有import任何模块。

到目前为止,所有其他依赖项都安装了类型定义,node_modules/@types并被编译器正确识别,如此处所述

然而js-xlsx,包中包含类型定义,即编译器node_modules/xlsx/types/index.d.ts不会自动获取。

不幸的是,我无法更改项目结构和模块系统。如何让 typescript 编译器识别xlsx包的类型定义,以便我可以执行以下操作:

onload(event: any) {
  let workbook = XLSX.read(event.target.result, {type: "binary"});
}

不会出现编译器错误并在 VS Code 中获得智能感知/代码完成。

4

1 回答 1

1

您可以创建一个将模块公开为全局变量的全局定义。

index.d.js将项目中的任何位置保存为js-xlsx.d.ts

在同一位置添加一个文件js-xlsx-global.d.ts

import * as xlsx from './js-xlsx'

declare global {
    export var XLSX: typeof xlsx;
}

现在您可以使用///文件中的引用XLSX来正确输入变量

/// <reference path="./js-xlsx-global.d.ts" />

XLSX.read(null, { type: "binary"}); // works, and is checked.
于 2018-05-22T13:09:30.080 回答