Соответствие объявления модуля определения машинописи импортированию модуля узла
Я установил популярный 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';