node.js - Matche TypeScript-definisjonsmoduldeklarasjon til Node-modulimport
Jeg har installert det populære d3-biblioteket gjennom NPM.
npm install d3
tsd install d3 -save
tsc
I min home.ts-fil har jeg importert modulen:
import * as d3 from 'd3/d3';Dette kompilerer korrekt, men jeg får denne semantiske feilen:
app/home/components/home.ts(2,21): error TS2307: Cannot find module 'd3/d3'.Også mister jeg all syntaksutheving/automatisk forslag-informasjon i IDE-en min.
Den originale d3.d.ts-filen levert av TSD erklærer modulen slik:
declare module 'd3' {
export = d3;
}
Hvis jeg endrer modulen til 'd3/d3', fungerer alt fint:
declare module 'd3/d3' {
export = d3;
}
Så, jeg har vanskelig for å få tak i begge deler av det jeg trenger:
import * as d3 from 'd3'; gir meg de type-definisjonene jeg forventer, men ser etter en modul i node_modules/d3.js som er feil.
import * as d3 from 'd3/d3'; finner riktig modul fordi banen er korrekt, men jeg mister mine typedefinisjoner fordi moduldeklarasjonen ikke stemmer.
Hvordan kan jeg få disse to tingene til å samsvare slik at jeg enkelt kan importere modulen uten å miste mine typedefinisjoner?
FYI: Jeg bruker TypeScript 1.7.5, og min moduleResolution er satt til node.
Svar #1
Du må fortelle loaderen hvor den skal lete etter ting. I din systemjs.config.js, legg til følgende kartlegging i map-objektet:
var map= {
...
...
'd3': 'node_modules/d3'
};
d3.js-filen er faktisk plassert i node_modules/d3, og ovennevnte mapping vil la loaderen finne filen. Nå kan du importere den i komponentene dine som:
import * as d3 from 'd3';
