Как импортировать модуль `npm` в угловое приложение, которое экспортирует функции и пространства имен с типами? - PullRequest
0 голосов
/ 25 апреля 2019

Я установил пакет npm https://github.com/alferov/array-to-tree/

npm install array-to-tree --save

В его файле index.d.ts есть объявления функций и пространства имен:

export = arrayToTree;

declare function arrayToTree<T>(data: T[], options?: Partial<arrayToTree.Options>): Array<arrayToTree.Tree<T>>;

declare namespace arrayToTree {
    interface Options {
        childrenProperty: string;
        parentProperty: string;
        customID: string;
        rootID: string;
    }

    type Tree<T> = T & {
        children?: Array<Tree<T>>;
    };
}

Я попытался импортировать его в мое угловое приложение таким образом:

import * as arrayToTree from 'array-to-tree';

Но я получил ошибку компиляции:

ошибка TS2307: не удается найти модуль 'arrayToTree'.

Я также пытался импортировать, используя стиль CommonJS:

import arrayToTree = require('array-to-tree');

и получил ошибку от редактора кода:

TS1202: назначение импорта нельзя использовать при нацеливании на модули ECMAScript. Попробуйте вместо этого 'import * as ns from "mod"', 'import {a} from "mod"' или 'import d from "mod"'.

Я перепробовал все предложенные варианты, но не решил проблему.

Я думал, что проблема может быть связана с файлом package.json в npm-package, потому что у него не было опции "typings": "index.d.ts". Но я попытался добавить эту опцию и не получил результата.

Я полагаю, что проблема заключается в импорте пространства имен вместе с функцией. Или может быть проблема с совместимостью версии Typescript и формата файла index.d.ts? Я использую Typescript 3.2.2.

Что я делаю не так?

Обновление: Я делаю пример на stackblitz: https://stackblitz.com/edit/angular-ehjdfy

В консоли произошла ошибка.

1 Ответ

0 голосов
/ 25 апреля 2019

Я только что проверил библиотеку:

import * as arrayToTree from 'array-to-tree' работает нормально.

узел ./node_modules/ts-node/dist/bin.js

> import * as arrayToTree from 'array-to-tree'
{}
> arrayToTree.toString()
'function arrayToTree(data, options) {\n  options = Object.assign(\n    {\n      parentProperty: \'parent_id\',\n      childrenProperty: \'children\',\n      customID: \'id\',\n      rootID: \'0\'\n    },\n    options\n  );\n\n  if (!Array.isArray(data)) {\n    throw new TypeError(\'Expected an array but got an invalid argument\');\n  }\n\n  var grouped = groupByParents(deepClone(data), options);\n  return createTree(\n    grouped,\n    grouped[options.rootID],\n    options.customID,\n    options.childrenProperty\n  );\n}'
...