Come si consumano i moduli npm da typescript?

Sto dando un colpo a typescript. Funziona bene al ciao stadio mondiale. Sto cercando di utilizzare un modulo npm:

index.ts =

 import _ = require('lodash') console.log(_.toUpper('Hello, world !')) 

Questo non funziona:

  • tsc index.ts -> Cannot find module 'lodash'. (2307) Cannot find module 'lodash'. (2307)
  • node-ts index.js -> Cannot find module 'lodash'. (2307) Cannot find module 'lodash'. (2307)

Guardare la documentazione di typescript e in google non ha aiutato. Altre domande di S / O sono senza risposta ( qui e qui ) o non correlate.

Elementi :

  • typescript 1.8 latest
  • Sì, lodash è installato npm i --save lodash ed esiste nel mio filesystem (controllato)
  • Ho anche fatto delle typings i --save lodash
  • le varianti import * as _ from 'lodash' o const _ = require('lodash') non funzionano neanche
  • Ho provato a modificare le opzioni di tsconfig.json come suggerito in altre risposte "moduleResolution": "node" e "module": "commonjs" come suggerito in alcune risposte, ancora non funziona

Come si consuma un pacchetto npm in typescript ??

Esistono diversi modi per importare i moduli da npm. Ma se non si digitano i caratteri, tsc si lamenterà sempre che non riesce a trovare il modulo che si richiede (anche se transpiled js funziona effettivamente ).

  • Se hai digitazione e non usi tsconfig.json , usa il reference per importare le tipizzazioni:

     ///  import * as _ from 'lodash`; console.log(_.toUpper('Hello, world !')) 
  • Se si utilizza un file tsconfig.json , assicurarsi di includere il file di tipizzazione (o non escluderlo, a propria scelta) e import come nell’esempio precedente.

Nel caso in cui non ci siano digitazioni disponibili. Hai due possibilità: scrivi il tuo su un file .d.ts , o ignora il controllo del tipo per la libreria.

Per ignorare completamente il controllo del tipo (questo non è il metodo consigliato), importare la libreria su una variabile di tipo any .

  const _: any = require('lodash'); console.log(_.toUpper('Hello, world !')) 

tsc si lamenterà che il require non esiste. Fornisci tipizzazioni di node o declare per scartare l’errore.

Probabilmente ti mancano i file di dichiarazione .

Vedi DefinitelyTyped per maggiori informazioni.


Prova questo:

 npm install --save lodash npm install --save @types/lodash 

Ora puoi importare.

 import _ from 'lodash'; 

Se il modulo che stai importando ha più esportazioni , puoi farlo:

 import { Express, Router } from 'express'; 

Se il modulo che stai importando “non ha un’esportazione predefinita” devi farlo:

 import * as http from 'http';