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';

Relaterte artikler