Соответствие объявления модуля определения машинописи импортированию модуля узла

Я установил популярный 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'; находит правильный модуль, потому что путь правильный, но я теряю определения типов, потому что объявление модуля не совпадает.

Как мне совместить эти две вещи, чтобы я мог просто импортировать модуль, не теряя определения типов?

К вашему сведению: я использую машинопись 1.7.5, и мой moduleResolution установлен в node,

1 ответ

Вы должны сказать загрузчику, где искать вещи. В вашем systemjs.config.jsдобавьте следующее отображение в map объект:

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

d3.js файл действительно находится в node_modules/d3 и приведенное выше сопоставление позволит загрузчику найти файл. Теперь вы можете импортировать его в свои компоненты как:

import * as d3 from 'd3';
Другие вопросы по тегам