How can moment.js be imported with typescript?
via typings
Moment.js now supports TypeScript in v2.14.1.
See: https://github.com/moment/moment/pull/3280
Directly
Might not be the best answer, but this is the brute force way, and it works for me.
- Just download the actual
moment.js
file and include it in your project. - For example, my project looks like this:
$ tree
.
├── main.js
├── main.js.map
├── main.ts
└── moment.js
- And here's a sample source code:
```
import * as moment from 'moment';
class HelloWorld {
public hello(input:string):string {
if (input === '') {
return "Hello, World!";
}
else {
return "Hello, " + input + "!";
}
}
}
let h = new HelloWorld();
console.log(moment().format('YYYY-MM-DD HH:mm:ss'));
- Just use
node
to runmain.js
.
Update
Apparently, moment now provides its own type definitions (according to sivabudh at least from 2.14.1 upwards), thus you do not need typings
or @types
at all.
import * as moment from 'moment'
should load the type definitions provided with the npm package.
That said however, as said in moment/pull/3319#issuecomment-263752265 the moment team seems to have some issues in maintaining those definitions (they are still searching someone who maintains them).
You need to install moment
typings without the --ambient
flag.
Then include it using import * as moment from 'moment'
You need to import moment() the function and Moment the class separately in TS.
I found a note in the typescript docs here.
/*~ Note that ES6 modules cannot directly export callable functions
*~ This file should be imported using the CommonJS-style:
*~ import x = require('someLibrary');
So the code to import moment js into typescript actually looks like this:
import { Moment } from 'moment'
....
let moment = require('moment');
...
interface SomeTime {
aMoment: Moment,
}
...
fn() {
...
someTime.aMoment = moment(...);
...
}
Not sure when this changed, but with the latest version of typescript, you just need to use import moment from 'moment';
and everything else should work as normal.
UPDATE:
Looks like moment recent fixed their import. As of at least 2.24.0
you'll want to use import * as moment from 'moment';