我正在使用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 。
答案 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.