找不到包类型定义

Package type definition cannot be found

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

error TS2304: Cannot find name 'XLSX'

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

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

然而,js-xlsx 包括包中的类型定义,即 node_modules/xlsx/types/index.d.ts 但这不是编译器自动 拾取的。

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

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

没有得到编译器错误并在 VS Code 中得到 intellisense/code 完成

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

将项目中任意位置的 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.