4

我已经d3通过NPM.

npm install d3
tsd install d3 -save
tsc

在我的home.ts文件中,我已经导入了模块:

import * as d3 from 'd3/d3';

这编译正确,但我得到这个语义错误:

app/home/components/home.ts(2,21): error TS2307: Cannot find module 'd3/d3'.

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

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

declare module 'd3' {
    export = d3;
}

如果我将模块更改为'd3/d3',一切正常:

declare module 'd3/d3' {
    export = d3;
}

所以,我很难得到我需要的两个:

import * as d3 from 'd3';给了我期望的类型定义,但会寻找一个node_modules/d3.js不正确的模块。

import * as d3 from 'd3/d3';找到正确的模块,因为路径是正确的,但我丢失了我的类型定义,因为模块声明不匹配。

我怎样才能让这两件事匹配起来,这样我就可以简单地导入模块而不会丢失我的类型定义?

仅供参考:我使用的是 typescript 1.7.5,并且我moduleResolution的设置为node.

4

1 回答 1

0

你需要告诉装载机去哪里找东西。在您的 systemjs.config.js中,在对象中添加以下映射map

var map= {
...
...
'd3':  'node_modules/d3'
};

d3.js文件确实位于node_modules/d3并且上面的映射将使加载程序找到该文件。现在,您可以将其导入组件中:

import * as d3 from 'd3';
于 2016-06-29T11:38:35.720 回答