Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将typescript定义模块声明与节点模块导入匹配_Node.js_Typescript_Tsd - Fatal编程技术网

Node.js 将typescript定义模块声明与节点模块导入匹配

Node.js 将typescript定义模块声明与节点模块导入匹配,node.js,typescript,tsd,Node.js,Typescript,Tsd,我已经通过NPM安装了流行的d3库 npm install d3 tsd install d3 -save tsc 在我的home.ts文件中,我导入了模块: import*作为d3从'd3/d3'导入 这可以正确编译,但我得到了以下语义错误: app/home/components/home.ts(2,21):错误TS2307:找不到模块“d3/d3”。 此外,我在IDE中丢失了所有语法突出显示/提前键入信息 TSD提供的原始d3.d.ts文件声明了如下模块: declare module

我已经通过
NPM
安装了流行的
d3

npm install d3
tsd install d3 -save
tsc
在我的
home.ts
文件中,我导入了模块:

import*作为d3从'd3/d3'导入

这可以正确编译,但我得到了以下语义错误:

app/home/components/home.ts(2,21):错误TS2307:找不到模块“d3/d3”。

此外,我在IDE中丢失了所有语法突出显示/提前键入信息

TSD
提供的原始
d3.d.ts
文件声明了如下模块:

declare module 'd3' {
    export = d3;
}
如果我将模块更改为
'd3/d3'
,一切正常:

declare module 'd3/d3' {
    export = d3;
}
所以,我很难同时得到我所需要的:

import*从“d3”作为d3导入
提供了我期望的类型定义,但在
节点_modules/d3.js
中查找了一个不正确的模块

import*作为d3从'd3/d3'导入找到正确的模块,因为路径正确,但我丢失了类型定义,因为模块声明不匹配

如何使这两件事匹配起来,以便在不丢失类型定义的情况下简单地导入模块


仅供参考:我使用的是typescript 1.7.5,我的
moduleResolution
设置为
节点

您需要告诉加载程序在哪里查找内容。在
systemjs.config.js
中,在
map
对象中添加以下映射:

var map= {
...
...
'd3':  'node_modules/d3'
};
d3.js
文件确实位于
node\u modules/d3
中,上面的映射将让加载程序找到该文件。现在,您可以将其作为以下内容导入组件:

import * as d3 from 'd3';

您确定节点将尝试加载
Node\u模块/d3.js
?我在我这边试过了,现在它既可以用TypeScript加载正确的打字,也可以用Node加载
Node_modules/d3/d3.js
。你有没有在@JMac上解决过他的问题?今晚我正好遇到了这个问题。我没有……我最后写了一个骇人的
declare
声明来让事情顺利进行,但这肯定不是理想的或真正的解决方案。我遇到了同样的问题,6周后有解决方案吗?:)我不知道您是如何发现
导入
声明
都应该引用
d3/d3
,但这确实节省了我几个小时的时间。谢谢你发布这个!