I'm giving a shot at typescript. It works fine at the hello world stage. I'm now trying to use a npm module :
index.ts
=
import _ = require('lodash')
console.log(_.toUpper('Hello, world !'))
This doesn't work :
tsc index.ts
-> Cannot find module 'lodash'. (2307)
node-ts index.js
-> Cannot find module 'lodash'. (2307)
Looking at typescript documentation and in google didn't help. Other S/O questions are either unanswered (here and here) or unrelated.
Elements :
npm i --save lodash
and exists in my filesystem (checked)typings i --save lodash
import * as _ from 'lodash'
or const _ = require('lodash')
don't work either"moduleResolution": "node"
and "module": "commonjs"
as suggested in some answers, still doesn't workHow do we consume a npm package in typescript ??
[EDIT] Thanks a lot for this answer! However, as of 2018, it is outdated. Readers, have a look at the other answers.
There are several ways to import modules from npm. But if you don't get typings, tsc
will always complain that it can't find the module you are requiring (even if transpiled js is actually working).
If you do have typings and do not use a tsconfig.json
, use reference
to import the typings:
/// <reference path="path/to/typings/typings.d.ts" />
import * as _ from 'lodash`;
console.log(_.toUpper('Hello, world !'))
If you are using a tsconfig.json
file, be sure to have your typings file included (or not excluded, your choice), and make the import
like on the previous example.
In the case when there is no available typings. You have two choices: write your own on a .d.ts
file, or ignore type checking for the library.
To completely ignore the type checking (this is no the recommended way), import the library on a variable of type any
.
const _: any = require('lodash');
console.log(_.toUpper('Hello, world !'))
tsc
will complain that require
doesn't exist. Provide node
typings, or declare
it to discard the error.