Определение типа пакета не найдено

Я работаю над проектом AngularJS, используя машинопись. Я пытаюсь использовать js-xlsx библиотека для анализа файла xlsx, и я получаю ошибку компиляции:

error TS2304: Cannot find name 'XLSX'

Мы используем глобальное пространство имен для всех файлов, и все скомпилированные файлы объединяются из-за outFile опция компилятора. Система модулей не настроена, и мы включаем все наши зависимости JavaScript в index.html файл. Поэтому мы не import любые модули.

Все остальные зависимости до этого момента имеют определения типов, установленные в node_modules/@types и правильно распознаются компилятором, как описано здесь.

js-xlsx однако включает в себя определения типов в пакете, т.е. node_modules/xlsx/types/index.d.ts но это не принимается автоматически компилятором.

К сожалению, я не могу изменить структуру проекта и систему модулей. Как заставить компилятор машинописи распознавать определения типов xlsx пакет, чтобы я мог сделать:

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

без получения ошибок компилятора и получения intellisense/ дополнения кода в VS Code.

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.
Другие вопросы по тегам