typescript - Pakettypdefinitionen kan inte hittas
Jag arbetar med ett AngularJS-projekt med TypeScript. Jag försöker använda js-xlsx-biblioteket för att analysera en xlsx-fil och jag får kompileringsfelet:
error TS2304: Cannot find name 'XLSX'Vi använder ett globalt namnrymd för alla filer och alla kompilerade filer sammanfogas på grund av kompilatoralternativet outFile. Ingen modulsystem är konfigurerad och vi inkluderar alla våra JavaScript-beroenden i index.html-filen. Vi importerar därför inga moduler.
Alla andra beroenden fram till denna punkt har typdefinitioner installerade under node_modules/@types och känns korrekt igen av kompilatorn som förklaras här.
Dock inkluderar js-xlsx typdefinitionerna i paketet, dvs node_modules/xlsx/types/index.d.ts, men detta plockas inte automatiskt upp av kompilatorn.
Tyvärr kan jag inte ändra projektstrukturen och modulsystemet. Hur får jag TypeScript-kompilatorn att känna igen typdefinitionerna för xlsx-paketet så att jag kan göra:
onload(event: any) {
let workbook = XLSX.read(event.target.result, {type: "binary"});
}
utan att få kompilatorfel och få intellisense/kodkomplettering i VS Code.
Svar #1
Du kan skapa en global definition som exponerar modulen som en global variabel.
Spara index.d.js på valfri plats i ditt projekt som js-xlsx.d.ts
På samma plats lägg till en fil js-xlsx-global.d.ts
import * as xlsx from './js-xlsx'
declare global {
export var XLSX: typeof xlsx;
}
Nu kan du använda ///-referenser i filer för att få XLSX-variabeln att typas korrekt
/// <reference path="./js-xlsx-global.d.ts" />
XLSX.read(null, { type: "binary"}); // works, and is checked.
