I'm using JSPM
, AngularJS
, TypeScript
, SystemJS
and ES6
and my project is running pretty well... unless I try to use momentJS.
This is the error I get:
TypeError: moment is not a function
This is part of the code:
import * as moment from 'moment';
More:
var momentInstance = moment(value);
If I debug it, moment is an object not a function:
This is what my moment.js JSPM package looks like:
module.exports = require("npm:moment@2.11.0/moment.js");
I've read a lot and couldn't find a way to solve this... any ideas?
Some things I've read/tried:
How to use momentjs in TypeScript with SystemJS?
https://github.com/angular-ui/ui-calendar/issues/154
https://github.com/jkuri/ng2-datepicker/issues/5
Typescript module systems on momentJS behaving strangely
https://github.com/dbushell/Pikaday/issues/153
Thanks!
Simply remove the grouping (* as
) from your import statement:
import moment from 'moment';
Without digging too deeply in to the source code, it looks like moment
usually exports a function, that has all kinds of methods and other properties attached to it.
By using * as
, you're effectively grabbing all those properties and attaching them to a new object, destroying the original function. Instead, you just want the chief export (export default
in ES6, module.exports
object in Node.js).
Alternatively, you could do
import moment, * as moments from 'moment';
to get the moment function as moment
, and all the other properties on an object called moments
. This makes a little less sense when converting ES5 exports like this to ES6 style, because moment
will retain the same properties.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With