Согласование объявления модуля определения typescript с импортированием модуля node

89
7

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


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


FYI: Я использую typescript 1.7.5, а мой moduleResolution установлен на node.

спросил(а) 2016-01-25T09:12:00+03:00 4 года, 8 месяцев назад
1
Решение
89

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


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

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


import * as d3 from 'd3';

ответил(а) 2016-06-29T14:38:00+03:00 4 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема