无法找到包类型定义

时间:2018-05-22 12:43:52

标签: typescript xlsx-js

我正在使用typescript处理AngularJS项目。我试图使用js-xlsx库来解析xlsx文件,我得到编译错误:

error TS2304: Cannot find name 'XLSX'

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

到目前为止,所有其他依赖项都在node_modules/@types下安装了类型定义,并且编译器可以正确识别here

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中获取 intellisense / code completion

1 个答案:

答案 0 :(得分: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.