我已经安装了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"'
。
我尝试了所有建议的变体,但没有解决问题。
我认为问题可能与npm-package中的package.json文件有关,因为它没有选项"typings": "index.d.ts"
。但是我尝试添加此选项,但没有结果。
我认为问题在于导入名称空间和函数。 还是兼容性Typescript版本和index.d.ts文件格式有问题?我使用打字稿3.2.2。
我在做什么错了?
更新: 我以stackblitz为例: https://stackblitz.com/edit/angular-ehjdfy
控制台出现错误。
答案 0 :(得分:0)
我刚刚检查了库文件
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}'